Python3的方法解析顺序(MRO)
Python 2.3 的新式類的?C3 算法。它也是 Python 3 唯一支持的方式(筆者使用python3,所以就先講這種的)
一個(gè)例子:
| 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__ |
如下圖:
?
那么模擬一下例子的拓?fù)渑判?#xff1a;首先找入度為0的點(diǎn),只有一個(gè)A,把A拿出來,把A相關(guān)的邊剪掉,再找下一個(gè)入度為0的點(diǎn),有兩個(gè)點(diǎn)(B,C),取最左原則,拿B,這是排序是AB,然后剪B相關(guān)的邊,這時(shí)候入度為0的點(diǎn)有E和C,取最左。這時(shí)候排序?yàn)锳BE,接著剪E相關(guān)的邊,這時(shí)只有一個(gè)點(diǎn)入度為0,那就是C,取C,順序?yàn)锳BEC。剪C的邊得到兩個(gè)入度為0的點(diǎn)(DF),取最左D,順序?yàn)锳BECD,然后剪D相關(guān)的邊,那么下一個(gè)入度為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/ 點(diǎn)贊啊
https://hanjianwei.com/2013/07/25/python-mro/
https://blog.csdn.net/weixin_35653315/article/details/78107466
總結(jié)
以上是生活随笔為你收集整理的Python3的方法解析顺序(MRO)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 英文对话数据集总结
- 下一篇: python 中的pickle库