python多繼承

python是支持多繼承的,多繼承通常就會考慮到繼承的順序問題,菱形繼承的問題。python

class A(object):
    def __init__(self, name):
        self.name = name
        print ("in A")

class B(A):
    def __init__(self, name):
        self.name = name
        print ("in B")

class C(A):
    def __init__(self, name):
        self.name = name
        print ("in C")

class D(B,C):
    pass
obj = D('myname')

結果輸出:
in B

python多繼承

上邊這段代碼裏B和C繼承了A這是單繼承,而D同時繼承了B和C屬於多繼承。
此時D沒有init構造函數,會繼承父類的構造函數。
D繼承了兩個類,那麼應該怎麼繼承呢?
按順序繼承先繼承B的構造函數,若是B也沒有構造函數,那應該繼承C仍是A呢?ide

兩種策略函數

  1. 廣度優先
  2. 深度優先

到底走那種策略
這裏先引入一個python裏的新式類與經典類的概念code

1.在Python裏凡是繼承了object的類,都是新式類。
2.Python3+裏只有新式類(在Python 3.x以後的版本,由於全部的類都派生自內置類型object(即便沒有顯示的繼承object類型),即全部的類都是「新式類」。)
3.Python2+裏繼承object的類是新式類,沒有寫父類的是經典類
4.經典類目前在Python裏基本沒有應用blog

如今回答上個問題,該繼承C仍是A繼承

1. python2 中經典類是按照深度優先查找,新式類按照廣度優先查找。
2. python3 中全部的類都是新式類因此都是按照廣度優先來繼承。

上述代碼很明顯是新式類,因此當B沒有構造函數時繼承C的構造函數,C也沒有的時候繼承A
若是在python2中,且爲經典類的話當B沒有構造函數時繼承A的構造函數,A沒有的時候繼承Cit

相關文章
相關標籤/搜索