python多重继承之拓扑排序
2021-07-12 07:08
                         标签:tin   说明   存在   ade   技术   起点   alt   结果   rap    在图论中,拓扑排序(Topological Sorting) 是一个 有向无环图(DAG,Directed Acyclic Graph) 的所有顶点的线性序列。且该序列必须满足下面两个条件: 例如,下面这个图: 它是一个DAG图,那么如何写出它的拓扑顺序呢?这里说一种比较常用的方法: 于是,得到拓扑排序后的结果是{1,2,4,3,5}   为了进一步熟悉这个拓扑排序的方法,我们再来一张图,试试看排序结果是怎样的,它继承的内容是否如你所想 还是先根据继承关系构一个继承图 最后,我们执行上面的代码,发现 最后的最后,python继承顺序遵循C3算法,只要在一个地方找到了所需的内容,就不再继续查找 python多重继承之拓扑排序 标签:tin   说明   存在   ade   技术   起点   alt   结果   rap    原文地址:https://www.cnblogs.com/ighuahua/p/9547557.html在python3中,所有类都是新式类(默认继承obj,具有super,mro方法),采用广度优先,即拓扑排序算法
在python2.7中,新式类和经典类并存,经典类采用深度优先算法,即纵向
super方法本质,不是单纯找父类,而是根据调用者的节点位置进行广度优先顺序来的
 
一、什么是拓扑排序


#!/usr/bin/env python3
# -*- coding: utf-8 -*-
class A(object):
    def foo(self):
        print(‘A foo‘)
    def bar(self):
        print(‘A bar‘)
class B(object):
    def foo(self):
        print(‘B foo‘)
    def bar(self):
        print(‘B bar‘)
class C1(A):
    pass
class C2(B):
    def bar(self):
        print(‘C2-bar‘)
class D(C1,C2):
    pass
if __name__ == ‘__main__‘:
    print(D.__mro__)
    d=D()
    d.foo()
    d.bar()

print(D.__mro__)的结果正如上面所计算的结果