经典类和新式类
class 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 # a1=Foo() print(Foo.__mro__) # (<class ‘__main__.Foo‘>, <class ‘__main__.E‘>, <class ‘__main__.D‘>, <class ‘__main__.H‘>, <class ‘__main__.C‘>, <class ‘__main__.B‘>, <class ‘__main__.A‘>, <class ‘__main__.G‘>, <class ‘__main__.F‘>, <class ‘object‘>) 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 经典类和新式类 py2: 经典类 新式类 如果自己或自己的前辈只要有人继承object 那么此类就是新式类 py3: 新式类 经典类 和新式类的查找成员的顺序不一样 经典类 :一条道路走到黑 (深度优先) 新式类 : c3算法实现 广度优先 Foo+ (C,D,F,G)+(G,D,G,W)+(I,G,D,W) Foo I B 获取 第一个表头 和 其他表尾进行比较 不存在 则拿走 如果存在 则放弃 然后获取第二个表的表头 再次和其他表的表尾进行比较 注意事项 super 是遵循__mro__执行顺序
新式类py3
原文地址:https://www.cnblogs.com/Sup-to/p/11129534.html
时间: 2024-11-07 20:28:23