1. 程式人生 > >經典類和新式類的區別,c3算法

經典類和新式類的區別,c3算法

默認 obj 查找 style print 解釋 區別 round font

一 經典類和新式類的區別

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