1 所用的类都可以被继承
2 没有继承其他类的类必然有一个父类(object)
3子类可以拥有父类的__init__里的类容
派生
子类除了父类的一些属性,还会有自己的属性和方法,这些就叫派生
如何使用代码实现
class Animal: def __init__(self,name,attack,hp): self.name=name self.attack=attack self.hp=hp def defecate(self): print('%s屁股一撅,要拉了' %self.name) pass class Human(Animal): def __init__(self,name,attack,hp,intelli): Animal.__init__(self,name,attack,hp) self.intelligence=intelli def think(self): print('who am i,where am i from?') def defecate(self): print('找了个厕所,脱下裤子') Animal.defecate(self) pass class dog(Animal): def __init__(self,name,attack,hp,kind): Animal.__init__(self,name,attack,hp) self.kind=kind def estrus(self): print('把异性狗按倒在地') pass
多继承的顺序 ,遵循广度优先原理
就是会一个一个找过去,哪种顺序能一个不漏的找到,就用哪种顺序
第一个图的顺序 D,B,A,C,E,X
第二个图 D,B,A,X,C,E,W
查看一个类的继承顺序代码比如D : D.mro()
这是新式类的顺序
那么什么是新式类
继承object的类都是新式类,python3都是新式类
而python2里面既有新式类也有经典类,经典类不同在于,继承顺序不同(深度优先),经典类也没有mro和super
super()是什么作用,怎么用?
super() 函数是用于调用父类(超类)的一个方法。
super 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO)、重复调用(钻石继承)等种种问题。
MRO 就是类的方法解析顺序表, 其实也就是继承父类方法时的顺序表。
http://www.runoob.com/python/python-func-super.html