今天看到個有趣的文章裏面談到python的經典類和典型類,遂驗證並總結。
經典類 不繼承自object,多繼承時深度優先搜索python
class C1: pass
新式類 直接或間接繼承自object類,多繼承時廣度優先搜索python2.7
class C2(object): pass
class A(object): def speek(self): print("AAAAAAAAAAA") class B(A): pass class C(A): def speek(self): print('CCCCCCC') class D(B, C): pass d = D() d.speek()
python2.7下,當A是新式類時,輸出:CCCCCC; 當A是經典類時輸出:AAAAAA
python3.3下,不管A是否繼承自object,輸出都是:CCCCCCcode
A / \ / \ B C \ / \ / D
深度優先搜索時,搜索順序 D->B->A 廣度優先搜索時順序: D->B->C->A繼承
可見py2會根據新式類或者經典類採用不一樣的搜索方法,可是py3則不理會這一點所有采用廣度優先搜索。class