Python新式類與經典類 舊式類 的區別

2021-07-24 09:40:33 字數 981 閱讀 2785

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

新式類的

mro(method resolution order 基類搜尋順序)演算法

採用c3演算法廣度優先搜尋,而舊式類的

mro演算法

是採用深度優先搜尋

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

➤截止到python2.1,只存在舊式類。舊式類中,類名和type是無關的:如果x是乙個舊式類,那麼x.__class__

定義了x的類名,但是type(x)

總是返回

。這反映了所有的舊式類的例項是通過乙個單一的叫做instance

的內建型別來實現的,這是它和類不同的地方。

➤新式類是在python2.2為了統一類和例項引入的。乙個新式類只能由使用者自定義。如果x是乙個新式類的例項,那麼type(x)

和x.__class__

是一樣的結果(儘管這不能得到保證,因為新式類的例項的__class__

方法是允許被使用者覆蓋的)。 ➤

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

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

class a:

pass

class b:

pass

class c(b):

pass

class d(c,a):

pass

執行順序為:

d->c->b,->a

class a(object):

pass

class b(object):

pass

class c(object):

pass

class d(a,b,c):

pass

執行順序為:

d->a->b->c->object

Python新式類與舊式類

主要是深度與廣度mro 繼承的區別 在python 3.x中取消了經典類,預設都是新式類,並且不必顯式的繼承object,也就是說 class person object pass class person pass class person pass 三種寫法並無區別,推薦第一種 但是在pytho...

python新式類與舊式類

python2.x是經典類 舊式類 是以深度優先 但是在python2.x中,預設都是經典類,只有顯式繼承了object才是新式類,即 class person object pass新式類寫法 class person pass經典類寫法 class person pass經典類寫法 他們最明顯的...

Python新式類與經典類 舊式類 的區別

新式類都從object繼承,經典類不需要。新式類的 mro method resolution order 基類搜尋順序 演算法 採用c3演算法廣度優先搜尋,而舊式類的 mro演算法 是採用深度優先搜尋 新式類相同父類只執行一次建構函式,經典類重複執行多次。截止到python2.1,只存在舊式類。舊...