Day29.深度优先与广度优先
1.经典类:深度优先,新式类:广度优先
''' 如果多继承是菱形继承,经典类和新式类的属性查找顺序不一样: 经典类:深度优先,会在检索第一条分支的时候就直接一条到走到黑,即会检索共有的父类 新式类:广度优先,会在检索最后一条分支的时候检索共同的父类 都是一个分支一个分支的找下去,然后最后找object ''' class G: def test(self): print('from G') class E(G): def test(self): print('from E') class F: def test(self): print('from F') class B(E): def test(self): print('from B') class C(F): def test(self): print('from C') class D(G): def test(self): print('from D') class A(B, C, D): # def test(self): # print('from A') pass print('新式类:.mro()查看函数顺序,最后检索共同的父类'.center(40, '-')) print(A.mro()) # 顺序: A->B->E->C->F->D->G->object obj = A() obj.test() ''' 多继承总结: 使用时,规避以下几点问题: 1.继承结构尽量不要过于复杂 2.推荐使用mixins机制:在多继承的背景下满足继承的什么`是`什么的关系 '''