七、面向物件_6.super()
阿新 • • 發佈:2021-10-28
super()
super(當前類名,self).func() / super().func()
功能:呼叫父類方法
super()可以自動查詢父類,呼叫遵循__mro__類屬性的順序,比較適合單繼承使用
class Ronaldinho(object): def __init__(self): self.skill = '牛尾巴' def play_soccer(self): print(f'技能:{self.skill}') class Messi(Ronaldinho): def __init__(self): self.skill = '油炸丸子' def play_soccer(self): print(f'技能:{self.skill}') # 方法二:super() # 1.super(當前類名,self).func() # super(Messi,self).__init__() # super(Messi,self).play_soccer() # 2.super(當前類名,self).func() super().__init__() super().play_soccer() class Neymar(Messi): def __init__(self): self.skill = '彩虹' def play_soccer(self): self.__init__() print(f'技能:{self.skill}') def play_ronaldinho_soccer(self): Ronaldinho.__init__(self) Ronaldinho.play_soccer(self) def play_messi_soccer(self): Messi.__init__(self) Messi.play_soccer(self) # 一次性呼叫父類同名屬性和方法 def play_old_soccer(self): # 方法一: # 缺點:1.如果父類名更改,此處也需要修改 2.如果父類很多則程式碼量過大 # Ronaldinho.__init__(self) # Ronaldinho.play_soccer(self) # Messi.__init__(self) # Messi.play_soccer(self) # 方法二:super() # 1.super(當前類名,self).func() # super(Neymar,self).__init__() # super(Neymar,self).play_soccer() # 2.super().func() super().__init__() super().play_soccer() N = Neymar() # N.play_soccer() # N.play_ronaldinho_soccer() # N.play_messi_soccer() # N.play_soccer() N.play_old_soccer() 技能:油炸丸子 技能:牛尾巴