python中新式类和经典类
生活随笔
收集整理的這篇文章主要介紹了
python中新式类和经典类
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
python中的類分為新式類和經(jīng)典類,具體有什么區(qū)別呢?簡單的說,
1.新式類都從object繼承,經(jīng)典類不需要。
-
Python 2.x中默認(rèn)都是經(jīng)典類,只有顯式繼承了object才是新式類
-
Python 3.x中默認(rèn)都是新式類,不必顯式的繼承object
2.經(jīng)典類繼承深度優(yōu)先,新式類繼承廣度優(yōu)先。
在多重繼承關(guān)系下,子類的實(shí)例對(duì)象想要調(diào)用父類的方法,向上尋找時(shí)的順序。
3.新式類相同父類只執(zhí)行一次構(gòu)造函數(shù),經(jīng)典類重復(fù)執(zhí)行多次。
class A:def __init__(self):print 'a', class B(A):def __init__(self):A().__init__()print 'b', class C(A):def __init__(self):A().__init__()print 'c', class D(B,C):def __init__(self):B().__init__()C().__init__()print 'd',class E(D,A):def __init__(self):D().__init__()A().__init__()print 'e', d=D() print '' e=E()代碼執(zhí)行后打印如下:
a a b a a b a a c a a c d a a b a a b a a c a a c d a a b a a b a a c a a c d a a e第一行應(yīng)該按如下分組a a b 、a a b |a a c 、a a c| d。首先執(zhí)行D的init函數(shù),D的init包含B和C的init,都執(zhí)行之后才會(huì)執(zhí)行print d,至于為什么顯示執(zhí)行了兩次構(gòu)造函數(shù),這個(gè)取決于類內(nèi)部的call方法,之后介紹。
''' 遇到問題沒人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書! ''' class A(object):def __init__(self):print 'a', class B(A):def __init__(self):super(B,self).__init__()print 'b', class C(A):def __init__(self):super(C,self).__init__()print 'c', class D(B,C):def __init__(self):super(D,self).__init__()print 'd', class E(D,A):def __init__(self):super(E,self).__init__()print 'e', d=D() print '' e=E()結(jié)果打印如下:
a c b d a c b d e總結(jié)
以上是生活随笔為你收集整理的python中新式类和经典类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python中read()、readli
- 下一篇: python中函数重载和重写