Python 2.3 的新式类的 C3 算法。它也是 Python 3 唯一支持的方式(笔者使用python3,所以就先讲这种的)
一个例子:
class D(object): pass
class E(object): pass
class F(object): pass
class C(D, F): pass
class B(E, D): pass
class A(B, C): pass
if __name__ == '__main__': print A.__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 '__main__.A'>, <class '__main__.B'>, <class '__main__.E'>, <class '__main__.C'>, <class '__main__.D'>, <class '__main__.F'>, <type 'object'>)
参考:
http://python.jobbole.com/85685/ 点赞啊
https://hanjianwei.com/2013/07/25/python-mro/
https://blog.csdn.net/weixin_35653315/article/details/78107466