2022/3/31 CSGO飾品價格記錄
阿新 • • 發佈:2022-03-31
super() 函式是用於呼叫父類(超類)的一個方法。
super() 是用來解決多重繼承問題的,直接用類名呼叫父類方法在使用單繼承的時候沒問題,但是如果使用多繼承,會涉及到查詢順序(MRO)、重複呼叫(鑽石繼承)等種種問題。
MRO 就是類的方法解析順序表, 其實也就是繼承父類方法時的順序表。
class A: def __init__(self): print("A init") self.a = "a_init" def add(self, x): y = x+1 print(y) print(self.a) class B(A): def __init__(self): # 父類初始化 # 如過註釋掉這行,導致父類A沒有進行初始化,呼叫父類的self.a就會報錯找不到變數a # 因為classB有建構函式,所以實列化B()是不會執行父類的魔法方法__init__() super(B,self).__init__() print("B init") def add(self, x): # 使用super()呼叫父類的同名方法 super(B,self).add(x) print("B method") if __name__ == "__main__": b = B() b.add(2) # 3
A init
B init
3
a_init
B method
PS:
子類不定義建構函式時候,預設引用父類建構函式
子類定義了建構函式,預設不會引用父類建構函式
子類定義了建構函式,如果需要使用父類建構函式需要顯示呼叫