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机制:在多继承的背景下满足继承的什么`是`什么的关系
'''

posted on 2024-06-26 14:15  与太阳肩并肩  阅读(1)  评论(0编辑  收藏  举报

导航