经典类和新式类的区别,c3算法
Posted lxx7
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了经典类和新式类的区别,c3算法相关的知识,希望对你有一定的参考价值。
一 经典类和新式类的区别
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‘>)
查找口头解释
获取第一个表头 和 其他表位进行比较
不存在则拿走。
如果存在,则放弃,然后获取第二个表的表头再次和其他表的表尾进行比较。
以上是关于经典类和新式类的区别,c3算法的主要内容,如果未能解决你的问题,请参考以下文章