zoukankan      html  css  js  c++  java
  • 多继承之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)中方法

      

    面试题

  • 相关阅读:
    HDU 1009 FatMouse' Trade
    python正则表达式
    Python学习week5
    Python学习week4
    Python学习week3
    Python学习week2
    Python学习week1
    生活的艰辛(最小割,最大密度子图)
    最大获利(最小割,最大权闭合图,最大密度子图)
    最大密度子图
  • 原文地址:https://www.cnblogs.com/12345huangchun/p/9960025.html
Copyright © 2011-2022 走看看