python中的新式類和經典類的區別

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

新式類和經典類的區別

  • 新式類都從object繼承,經典類不須要。
  • 經典類的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

參考:https://www.9xkd.com/對象

相關文章
相關標籤/搜索