1. 程式人生 > >python 經典類和新式類的區別?

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

1)首先,寫法不一樣:

#新式類是指繼承object的類
class A(object):
      ...........
#經典類是指沒有繼承object的類
class A:
     ...........

2)在多繼承中,新式類採用廣度優先搜尋,而舊式類是採用深度優先搜尋。

3)新式類更符合OOP程式設計思想,統一了python中的型別機制。

Python2.x中預設都是經典類,只有顯式繼承了object才是新式類

Python 3.x中預設都是新式類,不必顯式的繼承object

其次:

------新式類物件可以直接通過__class__屬性獲取自身型別:type

------繼承搜尋的順序發生了改變,經典類多繼承屬性搜尋順序: 先深入繼承樹左側,再返回,開始找右側;新式類多繼承屬性搜尋順序: 先水平搜尋,然後再向上移動

------新式類增加了__slots__內建屬性, 可以把例項屬性的種類鎖定到__slots__規定的範圍之中

------新式類增加了__getattribute__方法

最後:
class A():
    def __init__(self):
        pass
    def save(self):
        print "This is from A"
class B(A):
    def __init__(self):
        pass
class C(A):
    def __init__(self):
        pass
    def save(self):
        print  "This is from C"
class D(B,C):
    def __init__(self):
        pass
fun =  D()
fun.save()

經典類的答案: This is from A
新式類的答案: This is from C