多继承补充
Posted kangqi452
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多继承补充相关的知识,希望对你有一定的参考价值。
面向对象多继承
1. __mro__和c3算法详解 (1 )__mro__: python 类有多继承特性,如果继承关系太复杂,很难看出会先调用那个属性或方法。 为了方便且快速地看清继承关系和顺序,可以用__mro__方法来获取这个类的调用顺序。 (2) c3算法 ss A(object): pass class B(A): pass class C(B): pass class D(object): pass class E(D,C): pass class F(object): pass class G(F): pass class H(C,G): pass class Foo(E,H): pass # print(E.__mro__) # print(H.__mro__) """ L(Foo + L(E) + L(H) ) L(E) = E,D,C,B,A,object L(H) = H,C,B,A,G,F,object Foo = (object) + (G,F,object) Foo,E,D,H,C,B,A,G,F,object """ print(Foo.__mro__) 2. 经典类和新式类 a. 先找左再找右 class A(object): pass class B(object): def f1(self): print(‘B‘) class C(A, B): pass obj = C() obj.f1() b. 经典类和新式类 py2: 经典类: 新式类: 如果自己或自己的前辈只要有人继承了object, 那么此类就是新式类 py3: 新式类 经典类和新式类的查找成员的顺序不一样. 经典类, 一条道走到黑(深度优先). 新式类, C3算法实现(python2.3更新时c3算法) Foo + (C,D,F,G) + (G,D,G,W) + (I,G,D,G,W) FOO, 获取第一个表头 和 其他表位进行比较 不存在则拿走 如果存在, 则放弃,然后获取第二个表的表头再次和其他表的表尾进行比较 简答, 经典类, 一条道走到黑(深度优先) 新式类, 留个根.(科学c3算法) 注意事项: super是遵循__mro__执行顺序
以上是关于多继承补充的主要内容,如果未能解决你的问题,请参考以下文章