Python多繼承用super呼叫父類方法?

時間 2021-06-08 08:02:59

1樓:

python的super傳遞:

python多重繼承的super呼叫父類的兄弟類 - 30天嘗試新事情

如果要呼叫父類的父類,可以直接用類名(類名需要在mro裡面)

# 多重繼承

class A:

def __init__(selfprint('A init'print(self)

def fun(selfprint('A',self)

class B(A):

def __init__(selfprint('B init'print(self)

def fun(selfprint('B', self)

class C(B):

def __init__(selfprint('C init'print(self)

def fun(selfprint('C', self)

class X:

def fun(selfprint('X',self)

class D(C):

def __init__(selfsuper(B, self).__init__() # super(D) -> 指向了C

print('D init')

def fun(selfC.fun(selfB.fun(selfA.fun(selfX.fun(self)

def main():

d = D()

print(d.__class__.mro())

d.fun()

if __name__ == '__main__':

main()

輸出:D init

[, , , , ]

C <__main__.D object at 0x00000000025F6700>

B <__main__.D object at 0x00000000025F6700>

A <__main__.D object at 0x00000000025F6700>

X <__main__.D object at 0x00000000025F6700>

2樓:小張

1, 如果父類方法裡沒用super, 則說明父類把他的父類的方法重寫了, 就沒必要向上找了.

如果要呼叫某個父類的父類的方法func, 也可以用super(Fatherclass, self).func()

2, 如果場景的比較複雜, 建議直接用具體那個父類的類名呼叫, 這樣就比較清晰, 直接確定引數. Fatherclass.func(self)

3, 另外, super根據MRO列表找到下乙個類, 具體呼叫的哪個方法, 傳入哪幾個引數, 應該很清晰

es6中class類繼承的super我可以理解為是父類的例項麼

Tianfan 執行過程,是把 this 這個物件,放進 super 進行包裝後返回到 this 上。其實 this 也是函式的引數,你就能理解了。 謝然 super不是父類的例項,只是乙個為了你方便訪問到父類函式 包括建構函式 的關鍵字 而且即使發生了繼承,也只有乙個物件例項被建立可以看一下我這邊...

python 用list of lists表示矩陣的問題?

usr bin python encoding utf 8 內容來自python cookbook 第二版第4.5章節 在無須共享引用的條件下建立列表的列表 避免隱式的引用共享 multi 0 5 3 print multi multi 0 0 oops print multi oops 0,0,0...

想自學Python,請問用python做資料處理視覺化,和開發App小遊戲,是不同的學習路徑嘛?

可以交叉,我最近想做乙個解魔方的遊戲,可以當純遊戲玩,也可以用攝像頭掃瞄真魔方,在遊戲裡復現。可以是人工解,也可以是ai解,要有撤銷,反撤銷,轉動視角,轉動動畫,儲存讀取等功能。目前只完成了魔方建模,撤銷反撤銷,動態轉動的部分。還需要視覺化,解魔方ai,監控玩家操作,掃瞄還原真魔方,儲存讀取等功能。...