python 十四 新式類和舊式類

2022-04-05 04:55:36 字數 704 閱讀 3501

這裡有個重要概念呢在下面那個鏈結

1、新式類都從object繼承,經典類不需要。

2、新式類的mro(method resolution order 基類搜尋順序)演算法採用c3演算法廣度優先搜尋,而舊式類的mro演算法是採用深度優先搜尋

3、新式類相同父類只執行一次建構函式,經典類重複執行多次。

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

python 3.x中預設都是新式類,經典類被移除,不必顯式的繼承object  )

乙個舊式類的深度優先的例子

class a():

def foo1(self):

print

"a"class b(a):

def foo2(self):

pass

class c(a):

def foo1(self):

print

"c"class d(b, c):

passd =

d()d.foo1()

# a

按照經典類的查詢順序從左到右深度優先的規則,在訪問d.foo1()的時候,d這個類是沒有的..那麼往上查詢,先找到b,裡面沒有,深度優先,訪問a,找到了foo1(),所以這時候呼叫的是a的foo1(),從而導致c重寫的foo1()被繞過

參考:

python 新式類和舊式類

python的新式類是2.2版本引進來的,我們可以將之前的類叫做經典類或者舊類。為什麼要在2.2中引進new style class呢?官方給的解釋是 為了統一類 class 和型別 type 在2.2之前,比如2.1版本中,類和型別是不同的,如a是classa的乙個例項,那麼a.class 返回 ...

python 新式類和舊式類

新式類和舊式類 python的新式類是2.2版本引進來的,我們可以將之前的類叫做經典類或者舊類。為什麼要在2.2中引進new style class呢?官方給的解釋是 為了統一類 class 和型別 type 在2.2之前,比如2.1版本中,類和型別是不同的,如a是classa的乙個例項,那麼a.c...

python 新式類和舊式類

python的新式類是2.2版本引進來的,我們可以將之前的類叫做經典類或者舊類。為什麼要在2.2中引進new style class呢?官方給的解釋是 為了統一類 class 和型別 type 在2.2之前,比如2.1版本中,類和型別是不同的,如a是classa的乙個例項,那麼a.class 返回 ...