(一)Python入門-6面向對象編程:08多重繼承-mro()-super()得到父類的定義

一:多重繼承

  Python支持多重繼承,一個子類能夠有多個「直接父類」。這樣,就具有了「多個父類」的特色。可是因爲,這樣會被「類的總體層次」搞的異常複雜,儘可能避免使用。spa

二:mro()

  Python支持多繼承,若是父類中有相同名字的方法,在子類沒有指定父類名時,解釋器將 「從左向右」按順序搜索。code

  MRO(MethodResolution Order):方法解析順序。 咱們能夠經過mro()方法得到 「類的層次結構」,方法解析順序也是按照這個「類的層次結構」尋找的。對象

【操做】多重繼承-mro()blog

#多重繼承-mro()
class A:
    def aa(self):
        print('aa')
    def say(self):
        print('say AAA')

class B:
    def bb(self):
        print('bb')
    def say(self):
        print('say BBB')

class C(B,A):
    def cc(self):
        print('cc')

cc = C()
print(C.mro())    #打印類的層次結構
cc.say()          #解釋器尋找方法是‘從左到右’的方式尋找,此時會執行B中的say()

三:super()得到父類定義

  在子類中,若是想要得到父類的方法時,咱們能夠經過 super()來作。繼承

  super()表明父類的定義,不是父類對象。io

【操做】class

#super()
class A:
    def say(self):
        print('A:',self)
        print('say AAA')

class B(A):
    def say(self):
        #A.say(self)      #調用父類的say()方法
        super().say()    #經過super()調用父類方法
        print('say BBB')

b = B()
b.say()

運行結果:object

  A: <__main__.B object at 0x0000020326058AC8>
  say AAA
  say BBB搜索

相關文章
相關標籤/搜索