。這反映了所有的舊式類的實(shí)例是通過一個(gè)單一的叫做instance的內(nèi)建類型來實(shí)現(xiàn)的,這是它和類不同的地方。" />
更新時(shí)間:2018-11-26 來源:黑馬程序員 瀏覽量:
1. 截止到python2.1,只存在舊式類。舊式類中,類名和type是無關(guān)的:如果x是一個(gè)舊式類,那么x.__class__定義了x的類名,但是type(x)總是返回<type 'instance'>。這反映了所有的舊式類的實(shí)例是通過一個(gè)單一的叫做instance的內(nèi)建類型來實(shí)現(xiàn)的,這是它和類不同的地方。
2. 新式類是在python2.2為了統(tǒng)一類和實(shí)例引入的。一個(gè)新式類只能由用戶自定義。如果x是一個(gè)新式類的實(shí)例,那么type(x)和x.__class__是一樣的結(jié)果(盡管這不能得到保證, 因?yàn)樾率筋惖膶?shí)例的__class__方法是允許被用戶覆蓋的)。
3. Python 2.x中默認(rèn)都是經(jīng)典類,只有顯式繼承了object才是新式類
4. Python 3.x中默認(rèn)都是新式類,經(jīng)典類被移除,不必顯式的繼承
5. 新式類的MRO算法采用C3算法廣度優(yōu)先搜索,而舊式類的MRO算法是采用深度優(yōu)先搜索
6. 新式類相同父類只執(zhí)行一次__init__函數(shù),經(jīng)典類重復(fù)執(zhí)行多次。
Python2.X中:
執(zhí)行順序?yàn)椋篋>C>A>B
Python3.X中:
執(zhí)行順序?yàn)椋篋>C>B>A>object
作者:傳智播人工智能+Python培訓(xùn)學(xué)院
首發(fā):http://python.itheima.com