python super()函式
阿新 • • 發佈:2021-07-31
1:super(本身類名,self).方法名(引數)這樣就可以呼叫父類的方法和引數了,super()內也可不加引數
2:規律是super是按呼叫的次序執行,super後面的語句是逆向執行的。
有2段示例程式碼,不同的在於value有沒有用self.value表示。用self.value表示傳入的引數,會產生類似遞迴的效果進來的One,Two,返回是Two,One。
用value表示則是按照順序傳遞的。
努力拼搏吧,不要害怕,不要去規劃,不要迷茫。但你一定要在路上一直的走下去,儘管可能停滯不前,但也要走。class Base: def __init__(self, value): self.value = value """ 程式1: foo = Ways(5) 先呼叫super(Ways, self).__init__(value) 再呼叫super(One, self).__init__(value)和super(Two, self).__init__(value) 再呼叫self.value = value,此時self.value為5 其後類似遞迴的逐漸返回 呼叫self.value += 3, self.value為8 呼叫self.value *= 2,self.value為16,注意進來的One,Two,返回是Two,One """ class One(Base): def __init__(self, value): super(One,self).__init__(value)# super(本身類名,self).方法名(引數)這樣就可以呼叫父類的方法和引數了 self.value *= 2 class Two(Base): def __init__(self, value): super(Two,self).__init__(value) self.value += 3 class Ways(One, Two): # super是繼承父代 def __init__(self, value): super(Ways,self).__init__(value) foo = Ways(5) print(foo.value) # 菱形繼承問題 class Base: def __init__(self, value): self.value = value class One(Base): def __init__(self, value): super(One, self).__init__(value * 2) """ 程式2: foo = Ways(5) 先呼叫super(Ways, self).__init__(value) 再呼叫super(One, self).__init__(value * 2)和super(Two, self).__init__(value + 3),然後呼叫self.value = value----One呼叫Base,使self.value為5,執行One,self.value為10,注意Two不再呼叫Base使self.value再為5, 直接加3,變成13 規律是super是按呼叫的次序執行,super後面的語句是逆向執行的。 """ class Two(Base): def __init__(self, value): super(Two, self).__init__(value + 3) class Ways(One, Two): def __init__(self, value): super(Ways, self).__init__(value) foo = Ways(5) print(foo.value) # 13