多继承之MRO
Posted 12345huangchun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多继承之MRO相关的知识,希望对你有一定的参考价值。
一,python2和python3的区别
在python2中存在两种类:一个叫经典类,在python2.2之前,一直用的是经典类,经典类如果在基类的根什么都不写,那么它就是根;还有一个叫新式类,在python2.2之后出现的,新式类的特点就是所有基类的根都是object。
在python3中只存在新式类,所以所有类的根都是object。
二,经典类的MRO
在经典类中的MRO是采用深度优先遍历方法,我们需要通过画图的方式解决比较复杂的题,然后再通过从左往右,一条路走到底的方式找出MRO。
我们创建一个FOO类的对象,它的MRO就是FOO,H,G,F,D,B,A,C,E
二,新式类的MRO,即C3算法
右边即推算过程,有L(H)=H+L(G)+L(X)+L(F)+GXF的方式一直往上走,到最后推到L(A)=A为止,然后把结果反带回去,即L(B)=BA,直到推到L(H)=HGPMXFDBECANO,在整个过程中,只用前面头和后面的身体比较,身体中没有就出来,有就跳过。也可以用类名.__mro__来获得类的MRO信息。
四,super()
super()可以帮我们执行MRO中下一个父类的方法,通常super()使用的两个地方:
1,可以访问父类的构造函数
2,可以调用父类(MRO)中方法
面试题
以上是关于多继承之MRO的主要内容,如果未能解决你的问题,请参考以下文章