python類的繼承順序

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

參考

繼承順序

新式類和經典類

發佈了125 篇原創文章 · 獲贊 31 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章