python:面向对象多继承中的 C3算法

 多继承中的 C3算法

1. 在多继承中存在经典类和新式类.

  经典类:自己或父辈没有继承object类

  新式类:自己或父辈中有继承object类

注意:python2(确切是2.2以后)中即有经典类,又有新式类.

     python3中只有新式类,因为python3定义类的时候会默认继承object类。

2. 多继承时的查找顺序 :

  类的继承关系如下图,写出查找顺序 :

 

1) 经典类: 一条道走到底,深度优先

经典类查找顺序为:遵循从左往右,一条道到底的查找顺序.

      Foo,E,D,C,B,A,H,G,F

2) 新式类: C3算法

  L(Foo + L(E) + L(H)) 

  L(E) = (D,object) + (C,B,A,object)

      E,D,C,B,A,object 

  L(H) = (C,B,A,object) + (G,F,object)

      H,C,B,A,G,F,object 

  Foo = (E,D,C,B,A,objec) + (H,C,B,A,G,F,object)

 最终结果:   Foo,E,D,H,C,B,A,G,F,object

3.打印查看继承的顺序

  __mro__ 

print(Foo.__mro__)   # 查看Foo类中的父类的继承顺序

注意 : 在python2 中没有__mro__ 方法

    super()  是遵循了 __mro__ 的执行顺序走的.

 

posted @ 2018-09-03 15:27  葡萄想柠檬  Views(217)  Comments(0)    收藏  举报
目录代码