python的类可以继承多个类,如果继承多个类,那么其寻找方法的方式有:深度优先和广度优先
基类或者父类继承了object类,那么该类就是新式类,否则便是经典类
当类是经典类时,多继承情况下,会按照深度优先方法查找
当类时新式类时,多继承情况下,会按照广度优先方法查找
1 class A(object): 2 def test(self): 3 print('from A') 4
5 class B(A): 6 def test(self): 7 print('from B') 8
9 class C(A): 10 def test(self): 11 print('from C') 12
13 class D(B): 14 def test(self): 15 print('from D') 16
17 class E(C): 18 def test(self): 19 print('from E') 20
21 class F(D,E): 22 # def test(self):
23 # print('from F')
24 pass
25 f1=F() 26 f1.test() 27 print(F.__mro__) #只有新式才有这个属性可以查看线性列表,经典类没有这个属性
新式类继承顺序:F->D->B->E->C->A
经典类继承顺序:F->D->B->A->E->C
python3中统一都是新式类
pyhon2中才分新式类与经典类
所有的父类的MRO列表遵循如下原则:
子类会先于父类被检查;多个父类会根据它们在列表中的顺序被检查;如果对下一个类存在两个合法的选择,则选择第一个类。