经典类和新式类的区别,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算法的主要内容,如果未能解决你的问题,请参考以下文章

python的MRO和C3算法

经典类和新式类的区别

python中新式类和经典类的区别

python的继承,多继承,经典类的MRO,新式类的MRO,C3算法,super

python中的MRO和C3算法

重写父类的方法及经典类和新式类的区别