。這反映了所有的舊式類(lèi)的實(shí)例是通過(guò)一個(gè)單一的叫做instance的內(nèi)建類(lèi)型來(lái)實(shí)現(xiàn)的,這是它和類(lèi)不同的地方。" /> 久久不卡视频,亚洲中文字幕码在线电影,无码成a∧人片手机在线播放

全國(guó)咨詢(xún)/投訴熱線(xiàn):400-618-4000

首頁(yè)技術(shù)文章正文

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

更新時(shí)間:2018-11-26 來(lái)源:黑馬程序員 瀏覽量:

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

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

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

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

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

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

Python2.X中:

1543223303710_1.jpg

執(zhí)行順序?yàn)椋篋>C>A>B
Python3.X中:
1543223317064_2.jpg

執(zhí)行順序?yàn)椋篋>C>B>A>object



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

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

分享到:
在線(xiàn)咨詢(xún) 我要報(bào)名
和我們?cè)诰€(xiàn)交談!