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,監控玩家操作,掃瞄還原真魔方,儲存讀取等功能。...