經典類和新式類的區別,c3算法
阿新 • • 發佈:2018-09-03
默認 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算法