多继承之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的主要内容,如果未能解决你的问题,请参考以下文章

Python 面向对象 之 多继承 MRO

多继承之MRO

python多继承之C3算法

第二十天- 多继承 经典MRO 新式MRO super()

python的继承,多继承,经典类的MRO,新式类的MRO,C3算法,super

python多继承中MRO问题