python類的繼承順序
- 新式類:廣度優先(BFS)
- 經典類:深度優先(DFS)
新式類和經典類
python2
class A: pass # 經典類
class A(): pass # 經典類
class A(object): pass # 新式類
python3
取消了經典類,全是新式類,全是bfs;
class A: pass # 新式類
class A(): pass # 新式類
class A(object): pass # 新式類
代碼
#coding=utf8
class A1(object):
print "carry out a1"
class A2(object):
print "carry out a2"
class A(A1, A2):
print "carry out a"
def dup(self):
print "dup A"
def a(self):
print "a"
class B1(object):
print "carry out b1"
class B2(object):
print "carry out b2"
class B(B1, B2):
print "carry out b"
def dup(self):
print "dup B"
def b(self):
print "b"
class C(A, B):
print "carry out c"
def dup(self):
print "dup c"
c = C()
c.dup()
c.a()
c.b()
執行結果(說好了python新式類廣度優先搜索呢?):
寫這段代碼的本意,是爲了驗證一個點:
多態,子類調用的方法,如果C中沒有dup方法,那他執行的是A中dup方法。
carry out a1
carry out a2
carry out a
carry out b1
carry out b2
carry out b
carry out c
dup c
a
b