一 经典类和新式类的区别
1, 只有py2中有经典类, 2.2版本以后新增了新式类. 怎样区分,新式类后面必须继承object
py3 中只有新式类.写不写继承,都是默认继承object
2, 查找顺序不一样,
经典类-深度优先,就是一条道走到黑
新式类 -广度优先(这样说不太精准),通过c3算法,找出顺序
二,c3 算法
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 # print(E.__mro__) #查找E类的查找顺序 # 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__)#(<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‘>) 查找口头解释
获取第一个表头 和 其他表位进行比较 不存在则拿走。 如果存在,则放弃,然后获取第二个表的表头再次和其他表的表尾进行比较。
原文地址:https://www.cnblogs.com/lxx7/p/9579304.html
时间: 2024-11-06 16:49:01