上周已经记录过类的许多定义概念,今天接着继承来说说,如何重写父类,以及在Python2与python3中中经典类与新式类的区别。
一、重写父类
1、重写,继承父类方法,方法定义完全一样,只是子类实现换成了子类所特有的特性。
class Zll(): def smile(self): print(‘哈哈哈哈‘) class Xz(Zll,Dcg): def smile(self):#重写父类的方法 print(‘呵呵呵‘)
2、重写父类方法,但是还想保持父类本身的实身,子类本身也有自己的实现
class Zll(): def smile(self): print(‘哈哈哈哈‘) def smile2(self): print(‘哈哈哈哈‘) class Dcg(): def smile2(self): print(‘啊啊啊啊‘) class Xz(Zll,Dcg): def smile(self):#重写父类的方法 print(‘呵呵呵‘) def smile2(self): #重写父类的方法 # Zll().smile2() #调用了父类 super(Xz, self).smile2() #这个自动帮你找到父类的 #如果是单继承的时候,Zll().smile2()与super(Xz, self).smile2()一样 #如果是多继承的时候,super(Xz, self).smile2()会先找到谁就会用谁了,不会再进行多次调用父类 print(‘呵呵呵‘) #1、父类的方法一点用的没有,我重新写 #2、父类有这个方法,但是呢,它的功能不够完善, # 给这个方法在原有的基础上,加上 # x = Xz() # x.smile2()
二、经典类与新式类的区别
1、python3中两者的区别
#经典类与新式类的区别 class My: pass class My2(object): pass #在python3是没有任何区别的
2、python2中两者的区别
class My: pass class My2(object): pass #在python2里是有区别的 #在python2里面,一个是深度优先,一个是广度优先
#python2里
#经典类是深度优先
#新式类
#新式类是广度优先
#在pyton2经典类里面不能调用super
#在python3里面都是广度优先
python学习笔记-day10-【 类的扩展: 重写父类,新式类与经典的区别】
原文:https://www.cnblogs.com/shmily2018/p/9094577.html