一、重写父类方法
1、父类的方法一点用的没有,我重新写
2、父类有这个方法,但是它的功能不够完善,所以给这个方法原有的基础上再给他添加一些新功能
1、完全重新父类方法:
class HWT():#定义一个父类 def smile(self): print('啊哈哈哈哈') class Xz(HWT):#Xz继承HWT类 def smile(self):#重写父类方法 print('呵呵呵呵额') x=Xz() x.smile() #结果 呵呵呵呵额
2、继承父类方法,并且扩展父类方法,一般调用父类方法
class HWT(): def smile(self): print('啊哈哈哈哈') class Xz(HWT): def smile(self):#重新父类方法 HWT().smile() # 第一种方法:直接自己调用了父类 print('呵呵呵呵额') x=Xz() x.smile() #结果 # 啊哈哈哈哈 # 呵呵呵呵额
3、用super()调用父类
class HWT(): def smile(self): print('啊哈哈哈哈') class Xz(HWT): def smile(self):#重新父类方法 #HWT().smile() # 第一种方法:直接自己调用了父类 super(Xz, self).smile() # 第二种方法:super自动帮Xz找到父类,然后实例化 print('呵呵呵呵额') x=Xz() x.smile() #结果 # 啊哈哈哈哈 # 呵呵呵呵额
4、经典类与新式类
经典类与新式类:python3 里面没有任何的区别,都是广度优先,但是在Python2中有区别:
Python2里面,多继承的时候经典类深度优先,新式类是广度优先,Python2经典类不能用super()
在python2中:
经典类继承顺序情况:
class A(): var='a' class B(A): pass class C(A): var='c' class D(B,C): pass if __name__ == '__main__': print(D.mro()) print(D.var) #结果 # [<class '__main__.D'>, <class '__main__.B'>, <class '__main__.A'>,var] # c
新式类:
(1)
class A(object): var='a' class B(A): pass class C(A): var='c' class D(B,C): pass if __name__ == '__main__': print(D.mro()) print(D.var) #结果 # [<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>] # c
(2)
class A(object): var='a' class B(A): pass class C(object): var='c' class D(B,C): pass if __name__ == '__main__': print(D.mro()) print(D.var) #结果 # [<class '__main__.D'>, <class '__main__.B'>, <class '__main__.A'>, <class '__main__.C'>, <class 'object'>] # a