码迷,mamicode.com
首页 > 编程语言 > 详细

经典类和新式类的区别,c3算法

时间:2018-09-03 17:19:37      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:顺序   一个   round   col   py3   bsp   code   nbsp   广度   

一  经典类和新式类的区别                                          

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算法

标签:顺序   一个   round   col   py3   bsp   code   nbsp   广度   

原文地址:https://www.cnblogs.com/lxx7/p/9579304.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!