设为首页 收藏本站
查看: 962|回复: 0

[经验分享] python面向对象编程实例解析

[复制链接]

尚未签到

发表于 2015-12-3 11:52:27 | 显示全部楼层 |阅读模式
  1. 类和函数
  
  面向对象编程的例子:



#!/usr/bin/env python
# -*- coding: utf-8 -*-
class Person(object):
#在属性和变量的前面增加“__”就可以将该变量或者方法转换成私有变量,要访问私有变量可以添加方法访问
def __init__(self,name,age):
self.__name = name
self.__age = age
#定义获取用户信息的函数
def print_info(self):
print "%s:%s" %(self.__name,self.__age)
#添加“get_Name”和“get_Age”方法获得属性
def get_Name(self):
return self.__name
def get_Age(self):
return self.__age

#添加设置姓名的函数
def set_Name(self,name):
self.__name = name   
#添加设置年龄的函数
def set_Age(self,age):
if(0< age <=200):
self.__age = age
else:
raise ValueError("bad age!")
  需要注意的是,在Python中,变量名类似__xxx__的,也就是以双下划线开头,并且以双下划线结尾的,是特殊变量,特殊变量是可以直接访问的,不是private变量,所以,不能用__name__、__score__这样的变量名。
  有些时候,你会看到以一个下划线开头的实例变量名,比如_name,这样的实例变量外部是可以访问的,但是,按照约定俗成的规定,当你看到这样的变量时,意思就是,“虽然我可以被访问,但是,请把我视为私有变量,不要随意访问”。
  双下划线开头的实例变量是不是一定不能从外部访问呢?其实也不是。不能直接访问__name是因为Python解释器对外把__name变量改成了_Student__name,所以,仍然可以通过_Student__name来访问__name变量:



>>> bart._Person__name
'WYL'
>>>

  但是强烈建议你不要这么干,因为不同版本的Python解释器可能会把__name改成不同的变量名。
  总的来说就是,Python本身没有任何机制阻止你干坏事,一切全靠自觉。
  
  2. 继承和多态:



python_class_test1.py文件:
#!/usr/bin/env python
# -*- coding: utf-8 -*-

#以下函数编写用于测试python中的类的继承和多态
#编写一个Animal类,其中有一个run方法
class Animal(object):
def run(self):
print "Animal is running..."
#编写一个Cat和Dog类继承自Animal类
class Cat(Animal):
def run(self):
print "Cat is running..."
def eat(self):
print "Cat is eating..."
class Dog(Animal):
def run(self):
print "Dog is running..."
def eat(self):
print "Dog is eating..."

test2.py文件:

from python_class_test1 import Animal,Cat,Dog
dog = Dog()
cat = Cat()
dog.run()
dog.eat()
cat.eat()
cat.run()
#a = list()
#d = Dog()
#c = Cat()
#判断一个变量是否是某个类型可以用isinstance()判断:
#print "判断dog是什么类型"
#isinstance(d,Dog)
#print "判断cat是什么类型"
#isinstance(c.Cat)
#isinstance(a,list)
  继承可以把父类的所有功能都直接拿过来,这样就不必重零做起,子类只需要新增自己特有的方法,也可以把父类不适合的方法覆盖重写;
  有了继承,才能有多态。在调用类实例方法的时候,尽量把变量视作父类类型,这样,所有子类类型都可以正常被接收;
  旧的方式定义Python类允许不从object类继承,但这种编程方式已经严重不推荐使用。任何时候,如果没有合适的类可以继承,就继承自object类。
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-146769-1-1.html 上篇帖子: 【python】实例-python实现两个字符串中最大的公共子串 下篇帖子: 用Python在Android手机上架FTP服务器
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表