gyts62 发表于 2017-4-26 11:06:27

python面向对象编程小结

  
参考:http://sucre.iteye.com/blog/680101
 
 
一、类基础
1、类的定义
class <类名>:
    <其他语句>
class <类名>(父类名):
    <其他语句>
Python代码  


[*]>>> 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 1, in <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()     
[*][1, 2, 3, 4, 5]     
[*]>>> L + 2    
[*]>>> L.show()     
[*][3, 4, 5, 6, 7]     
[*]>>>    
页: [1]
查看完整版本: python面向对象编程小结