转载自:https://my.oschina.net/cuilili/blog/501427
0x01 定义
今天看到个有趣的文章里面谈到python的经典类和典型类,遂验证并总结。
经典类 不继承自object,多继承时深度优先搜索
class C1:
pass
新式类 直接或间接继承自object类,多继承时广度优先搜索
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,输出都是:CCCCCC
A
/ \
/ \
B C
\ /
\ /
D
深度优先搜索时,搜索顺序 D->B->A 广度优先搜索时顺序: D->B->C->A
可见py2会根据新式类或者经典类采用不同的搜索方法,但是py3则不理会这一点全部采用广度优先搜索。