python中的類分爲經典類(舊式類)和新式類。python的新式類是2.2版本爲了統一類和實例引進來的。python
在Python2.x中默認都是經典類,只有顯式繼承了object的纔是新式類。 以下所示:算法
# 新式類,顯示繼承object class A(object): pass # 經典類 class A(): pass # 經典類 class A: pass
在python3.x中取消了經典類,默認都是新式類,而且新式類不須要顯式的繼承object對象。以下所示,這三種寫法均可以,並沒有區別:python3.x
# 第一種 class A(object): pass # 第二種 class A(): pass # 第三種 class A: pass
MRO
(method resolution order 基類搜索順序)算法是採用深度優先搜索,而新式類的MRO
算法採用C3算法廣度優先搜索。新式類和經典類最大的不一樣在於繼承搜索的順序發生了改變。 經典類採用深度優先搜索,也就是先深刻繼承樹左側查找,而後再返回,開始查找右側:函數
class A: def show(self): print("From A") class B(A): def show(self): print("From B") class C(A): def show(self): print("From C") class D(B, C): pass d = D() d.show() # From B
新式類採用廣度優先搜索,先在水平方向查找,再向上查找:code
class A(object): def show(self): print("From A") class B(A): def show(self): print("From B") class C(A): def show(self): print("From C") class D(B, C): pass d = D() d.show() # From C