開發與維運

多重繼承 | Python從入門到精通:高階篇之三十二

super() | Python從入門到精通:高階篇之三十一

多重繼承

我們通過一個例子來看一下:

class A(object):
    def test(self):
        print('AAA')

class B(object):
    def test2(self):
        print('BBB')

class C(B):
    pass 

類名.__bases__ 這個屬性可以用來獲取當前類的所有父類 。

print(C.__bases__)
print(B.__bases__)

執行結果:

image.png
image.png

在Python中是支持多重繼承的,也就是我們可以為一個類同時指定多個父類。可以在類名的()後邊添加多個類,來實現多重繼承。

class C(A,B):
    pass

多重繼承,會使子類同時擁有多個父類,並且會獲取到所有父類中的方法。

print(C.__bases__)

執行結果:

image.png

此時C繼承了A,B,此時A,B,C的關係

image.png

調用test:

c = C()

c.test()
c.test2()

執行結果:

image.png

在開發中沒有特殊的情況,應該儘量避免使用多重繼承,因為多重繼承會讓我們的代碼過於複雜。
在B中添加一個方法:

class A(object):
    def test(self):
        print('AAA')

class B(object):
    def test(self):
        print('B中的test()方法~~')

    def test2(self):
        print('BBB') 

class C(A,B):
    pass

c = C()

c.test()

執行結果:

image.png

如果A中沒有test方法,才會調用B中的。

class A(object):
    pass

執行結果:

image.png

如果多個父類中有同名的方法,則會現在第一個父類中尋找,然後找第二個,然後找第三個......前邊父類的方法會覆蓋後邊父類的方法。

我們通過圖來分析:

image.png

D繼承了A,B,C,如果此時D中有test()方法,則直接輸出就行,若沒有,則需要先去第一個父類中找,(我們以A,B,C為例),此時我們應該去A中找,若A中沒有,則需要去A的父類(object)中去找,若沒有繼續找,此時去第二個父類B中找,若沒有則去B的父類中找,如果已經找過一次,則不會繼續去找(提高性能),則去第三個C中找,若沒有,則去它的父類中找,因為C的父類是A,B,已經找過,則不會再繼續找。

image.png

配套視頻課程,點擊這裡查看

獲取更多資源請訂閱Python學習站

Leave a Reply

Your email address will not be published. Required fields are marked *