继承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

相关文章
相关标签/搜索