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