【转】python---方法解析顺序MRO(Method Resolution Order)<以及解决类中super方法>
【转】python---方法解析顺序MRO(Method Resolution Order)<以及解决类中super方法> MRO了解: 对于支持继承的编程语言来说,其方法(属性)可能定义在当前类,也可能来自于基类,所以在方法调用时就需要对当前类和基类进行搜索以确定方法所在的位置。而搜索的顺序就是所谓的「方法解析顺序」(Method Resolution Order,或MRO)。对于只支持单继承的语言来说,MRO 一般比较简单;而对于 Python 这种支持多继承的语言来说,MRO 就复杂很多。 而具体讨论MRO,我们需要针对不同python版本中的MRO进行解析 经典类:DFS深度优先搜索(Python2.2以前的版本) 新式类:BFS广度优先搜索(Python2.2中提出,在与经典类共存的情况下,是否继承object是他们的区分方式) 新式类C3算法:Python2.3提出(也是现在Python3唯一支持的方式) 对于下面讨论的类的多重继承:我们讨论两种情况。 一:经典类(深度优先搜索) 在经典类中,没有__mro__属性可以去查看MRO的顺序,但是,可以使用inspect模块中getmro方法 import inspect inspect.getmro(类名) (一)正常继承模式 在正常继承模式下,不会引起任何问题 (二)交叉继承模式 缺点 :C类原本是D的子类