今天看到个有趣的文章里面谈到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