1. 程式人生 > 遊戲資訊 >2022/3/31 CSGO飾品價格記錄

2022/3/31 CSGO飾品價格記錄

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:

子類不定義建構函式時候,預設引用父類建構函式

子類定義了建構函式,預設不會引用父類建構函式

子類定義了建構函式,如果需要使用父類建構函式需要顯示呼叫