繼承object對象對python多繼承的影響

0x01 定義

今天看到個有趣的文章裏面談到python的經典類和典型類,遂驗證並總結。
經典類 不繼承自object,多繼承時深度優先搜索python

class C1:
    pass

新式類 直接或間接繼承自object類,多繼承時廣度優先搜索python2.7

class C2(object):
    pass

0x02 驗證

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

相關文章
相關標籤/搜索