python:面向对象多继承中的 C3算法
多继承中的 C3算法
1. 在多继承中存在经典类和新式类.
经典类:自己或父辈没有继承object类
新式类:自己或父辈中有继承object类
注意:python2(确切是2.2以后)中即有经典类,又有新式类.
python3中只有新式类,因为python3定义类的时候会默认继承object类。
2. 多继承时的查找顺序 :
类的继承关系如下图,写出查找顺序 :

1) 经典类: 一条道走到底,深度优先
经典类查找顺序为:遵循从左往右,一条道到底的查找顺序.
Foo,E,D,C,B,A,H,G,F
2) 新式类: C3算法
L(Foo + L(E) + L(H))
L(E) = (D,object) + (C,B,A,object)
E,D,C,B,A,object
L(H) = (C,B,A,object) + (G,F,object)
H,C,B,A,G,F,object
Foo = (E,D,C,B,A,objec) + (H,C,B,A,G,F,object)
最终结果: Foo,E,D,H,C,B,A,G,F,object
3.打印查看继承的顺序
__mro__
print(Foo.__mro__) # 查看Foo类中的父类的继承顺序
注意 : 在python2 中没有__mro__ 方法
super() 是遵循了 __mro__ 的执行顺序走的.

浙公网安备 33010602011771号