python中的類分爲新式類和經典類,具體有什麼區別呢?簡單的說,
1.新式類都從object繼承,經典類不需要。
Python 2.x中預設都是經典類,只有顯式繼承了object纔是新式類
Python 3.x中預設都是新式類,不必顯式的繼承object
2.經典類繼承深度優先,新式類繼承廣度優先。
在多重繼承關係下,子類的範例物件想要呼叫父類別的方法,向上尋找時的順序。
3.新式類相同父類別只執行一次建構函式,經典類重複執行多次。
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()
程式碼執行後列印如下:
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
第一行應該按如下分組a a b 、a a b |a a c 、a a c| d。首先執行D的init函數,D的init包含B和C的init,都執行之後纔會執行print d,至於爲什麼顯示執行了兩次建構函式,這個取決於類內部的call方法,之後介紹。
'''
遇到問題沒人解答?小編建立了一個Python學習交流QQ羣:778463939
尋找有志同道合的小夥伴,互幫互助,羣裡還有不錯的視訊學習教學和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()
結果列印如下:
a c b d
a c b d e