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

[经验分享] python面向对象编程小结

[复制链接]

尚未签到

发表于 2017-4-26 11:06:27 | 显示全部楼层 |阅读模式
  
参考:http://sucre.iteye.com/blog/680101
 
 
一、类基础
1、类的定义
class <类名>:
    <其他语句>
class <类名>(父类名):
    <其他语句>
Python代码   DSC0000.png


  • >>> class human:  
  • ...     age=0  
  • ...     sex=''  
  • ...     name = ''  
  • ...  
  • >>> class student(human):  
  • ...     school = ''  
  • ...     number = 0  
  • ...     grade = 0  
  • ...  
  • >>>   

 
2、类的使用
如果直接使用类名修改其属性,那么将影响已经实例化的对象。
 
Python代码  


  • >>> class A:  
  • ...     name = 'A'  
  • ...     num = 2  
  • ...  
  • >>> A.name  
  • 'A'  
  • >>> a = A()       #实例化a对象  
  • >>> a.name  
  • 'A'  
  • >>> A.name = 'B'  
  • >>> A.name  
  • 'B'  
  • >>> a.name  
  • 'B'  
  • >>>   

 
二、类的属性和方法
1、类的属性:
如果类的属性是以两条下划线开始则该属性为类的私有属性,不能在类外部被访问。
私有属性的命名形式: __privateAttrs
 
如果在类内部的方法中使用类的私有属性,则应该以如下方式调用。
self.__privateAttrs
Python代码  


  • >>> class book:     
  • ...     __author = ''    
  • ...     __name = ''    
  • ...     __page = 0    
  • ...     price = 0    
  • ...     
  • >>> a = book()     
  • >>> a.__author     
  • Traceback (most recent call last):     
  •   File "<stdin>", line 1in <module>     
  • AttributeError: book instance has no attribute '__author'    
  • >>> a.price     
  • 0    
  • >>>   

 
2、类的方法
在类的内部使用def关键字可以为类定义一个方法。与函数定义不同的是,类的方法必须包含参数 'self ’ ,
且'self'必须为第一个参数。和类的私有属性命名相同,类的私有方法名也要以两条下划线开始。
Python代码  


  • >>> class book:  
  • ...     __author = ''  
  • ...     __name = ''  
  • ...     __page = 0  
  • ...     price = 0  
  • ...     def show(self):  
  • ...             print self.__author  
  • ...             print self.__name  
  • ...     def setname(self,name):  
  • ...             self.__name = name  
  • ...  
  • >>> a = book()  
  • >>> a.show()  
  •   
  •   
  • >>> a.setname('Tom')  
  • >>> a.show()  
  •   
  • Tom  
  • >>>   

 
在python中有一类以两条下划线开始并且以两条下划线结束的类方法,称之为专有方法。
__init__  构造函数,生成对象时调用
__del__  析构函数,释放对象时调用
__add__ 加运算
__mul__  乘运算
__cmp__ 比较运算
__repr__ 打印、转换
__setitem__ 按照索引赋值
__getitem__ 按照索引获取值
__len__ 获得长度
__call__ 函数调用
Python代码  


  • >>> class book:  
  • ...     __author = ''  
  • ...     __name = ''  
  • ...     __page = ''  
  • ...     price = 0  
  • ...     def __check(self,item):  
  • ...             if item == '':  
  • ...                     return 0  
  • ...             else:  
  • ...                     return 1  
  • ...     def show(self):  
  • ...             if self.__check(self.__author):  
  • ...                     print self.__author  
  • ...             else:  
  • ...                     print 'No value'  
  • ...             if self.__check(self.__name):  
  • ...                     print self.__name  
  • ...             else:  
  • ...                     print 'No value'  
  • ...     def setname(self,name):  
  • ...             self.__name = name  
  • ...     def __init__(self,author,name):  
  • ...             self.__author = author  
  • ...             self.__name = name  
  • ...   

 三、类的继承
1)单继承
Python代码  


  • >>> class parent:  
  • ...     __a = ''  
  • ...     __b = 0  
  • ...     def __init__(self,a,b):  
  • ...             self.__a = a  
  • ...             self.__b = b  
  • ...     def show(self):  
  • ...             print self.__a  
  • ...             print self.__b  
  • ...  
  • >>> a = parent('a',2)  
  • >>> a.show()  
  • a  
  • 2  
  • >>> class child(parent):  
  • ...     __c = ''  
  • ...     __d = 4  
  • ...     def showinfo(self):  
  • ...             self.show()  
  • ...  
  • >>> b = child('c',3)  
  • >>> b.show()  
  • c  
  • 3  
  • >>> b.showinfo()  
  • c  
  • 3  
  • >>>   

 2)多重继承
Python代码  


  • # -*- coding:utf-8 -*-   
  • class A:       #定义类A  
  •  name = 'A'   
  •  __num = 1  
  •  def show(self):  
  •   print self.name  
  •   print self.__num  
  •  def setnum(self,num):  
  •   self.__num = num  
  • class B:        #定义类B  
  •  nameb = 'B'  
  •  __numb = 2  
  •  def show(self):  
  •   print self.nameb  
  •   print self.__numb  
  •  def setname(self,name):  
  •   self.__name = name  
  • class C(A,B):  
  •  def showall(self):  
  •   print self.name  
  •   print self.nameb  
  •  show = B.show      #在这里表明show方法为B类的show方法,后来修改加上的  
  •   
  • >>> import jicheng  
  • >>> a = jicheng.A()  
  • >>> a.show()  
  • A  
  • 1  
  • >>> c = jicheng.C()  
  • >>> c.showall()  
  • A  
  • B  
  • >>> c.show()  #默认调用A类的show方法  
  • A  
  • 1  
  • >>> reload(jicheng)   #修改jicheng.py后重新加载  
  • <module 'jicheng' from 'jicheng.py'>  
  • >>> d =jicheng.C()  
  • >>> d.show()  
  • B  
  • 2  
  • >>>   

 五)重载
1)方法的重载实际上就是在类中使用def关键字重载父类的方法。如果重载父类中的方法,但又需要
在类中使用父类的该方法,可以使用父类名加‘ .’加方法名的形式调用。
Python代码  


  • # -*- coding:utf-8 -*-     
  • class Mylist:     
  •     __mylist = []     
  •     def __init__(self,*args):          
  •         self.__mylist = []     
  •         for arg in args:     
  •             self.__mylist.append(arg)      
  •     def __add__(self,n):            #重载‘+’运算符     
  •         for i in range(0, len(self.__mylist)):     
  •             self.__mylist = self.__mylist + n      
  •     def show(self):     
  •         print self.__mylist     
  •     
  •     
  • >>> import chongzai     
  • >>> L = chongzai.Mylist(1,2,3,4,5)     
  • >>> L.show()     
  • [12345]     
  • >>> L + 2    
  • >>> L.show()     
  • [34567]     
  • >>>    

运维网声明 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-369468-1-1.html 上篇帖子: python抓取一个页面 下篇帖子: python 生成文件MD5码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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