Python学习之路(面向对象之多重继承)

面向对象之多重继承

常用算法 Mro

模拟一下例子的拓扑排序:首先找入度为0的点,只有一个A,把A拿出来,把A相关的边剪掉,再找下一个入度为0的点,
有两个点(B,C),取最左原则,拿B,这是排序是AB,然后剪B相关的边,这时候入度为0的点有E和C,取最左。
这时候排序为ABE,接着剪E相关的边,这时只有一个点入度为0,那就是C,取C,顺序为ABEC。剪C的边得到两个入度为0的点(DF),取最左D,顺序为ABECD,
然后剪D相关的边,那么下一个入度为0的就是F,然后是object。
那么最后的排序就为ABECDFobject。

class D():
    pass
class E():
    pass
class F():
    pass
class B(E,D):
    pass
class C(D,F):
    pass
class A(B,C):
    pass

class a():
    pass
class b():
    pass
class c():
    pass
class d(b, c):
    pass
class e(a, b):
    pass
class f(e, d):
    pass

if __name__ == '__main__':
    print(1)
    print(A.__mro__ ) # ABECDF->Object
    print(f.__mro__) # feadbc->Object  跟继承参数顺序有关 先左后右


# 随意乱写

class _A():
    pass
class _B(_A):
    pass
class _C(_B):
    pass
class _D(_B):
    pass
class _E(_C, _D):
    pass
class _F(_A):
    pass
class _G(_E, _F):
    pass

if __name__ == '__main__':
    print(_G.__mro__) # _G_E_C_D_B_F_A

关注一波!喜欢一波!本人是前端菜鸟,正在做自己的个人博客邓鹏的博客,欢迎来交流学习, 使用的技术 vue + koa2 + mysql + php + nginx!

你可能感兴趣的:(Python学习之路(面向对象之多重继承))