。這反映了所有的舊式類的實例是通過一個單一的叫做instance的內(nèi)建類型來實現(xiàn)的,這是它和類不同的地方。" /> 鸥美亚洲日韩宗合,久久久无码精品亚洲日韩午夜,神马午夜AV午夜一二区
首頁技術(shù)文章正文

Python新式類與經(jīng)典類的區(qū)別

更新時間:2018-11-26 來源:黑馬程序員 瀏覽量:

1. 截止到python2.1,只存在舊式類。舊式類中,類名和type是無關(guān)的:如果x是一個舊式類,那么x.__class__定義了x的類名,但是type(x)總是返回<type 'instance'>。這反映了所有的舊式類的實例是通過一個單一的叫做instance的內(nèi)建類型來實現(xiàn)的,這是它和類不同的地方。

2. 新式類是在python2.2為了統(tǒng)一類和實例引入的。一個新式類只能由用戶自定義。如果x是一個新式類的實例,那么type(x)和x.__class__是一樣的結(jié)果(盡管這不能得到保證, 因為新式類的實例的__class__方法是允許被用戶覆蓋的)。

3. Python 2.x中默認都是經(jīng)典類,只有顯式繼承了object才是新式類

4. Python 3.x中默認都是新式類,經(jīng)典類被移除,不必顯式的繼承

5. 新式類的MRO算法采用C3算法廣度優(yōu)先搜索,而舊式類的MRO算法是采用深度優(yōu)先搜索

6. 新式類相同父類只執(zhí)行一次__init__函數(shù),經(jīng)典類重復(fù)執(zhí)行多次。

Python2.X中:

1543223303710_1.jpg

執(zhí)行順序為:D>C>A>B
Python3.X中:
1543223317064_2.jpg

執(zhí)行順序為:D>C>B>A>object



作者:傳智播人工智能+Python培訓(xùn)學(xué)院

首發(fā):http://python.itheima.com

分享到:
在線咨詢 我要報名
和我們在線交談!