python3 mro
我们知道, Python 类是支持(多)继承的,一个类的方法和属性可能定义在当前类,也可能定义在基类。针对这种情况,当调用类方法或类属性时,就需要对当前类以及它的基类进行搜索,以确定方法或属性的位置,而搜索的顺序就称为方法解析顺序。 方法解析顺序(Method Resolution Order),简称 MRO。对于只支持单继承的编程语言来说,MRO 很简单,就是从当前类开始,逐个搜索它的父类;而对于 Python,它支持多继承,MRO 相对会复杂一些。 实际上,Python 发展至今,经历了以下 3 种 MRO 算法,分别是: 从左往右,采用深度优先搜索(DFS)的算法,称为旧式类的 MRO; 自 Python 2.2 版本开始,新式类在采用深度优先搜索算法的基础上,对其做了优化; 自 Python 2.3 版本,对新式类采用了 C3 算法。由于 Python 3.x 仅支持新式类,所以该版本只使用 C3 算法。 有关旧式类和新式类的讲解,可阅读《 Python super()使用注意事项 》一文。 有读者可能会好奇,为什么 MRO 弃用了前两种算法,而选择最终的 C3 算法呢?原因很简单,前 2 种算法都存在一定的问题。 旧式类MRO算法 在使用旧式类的 MRO 算法时,以下面代码为例(程序一): class A : def method (self ): print (