前言
子類繼承父類的構造函數__init__
,具體有幾種情況,想一口氣說出來還真有點難。看到菜鳥教程總結的非常不錯,特意記錄下來,也方便自己后面翻閱。
詳情
-
情況一
子類不重寫
__init__
方法,實例化后會自動調用父類的__init__
方法。實例
class Father: def __init__(self, name): self.name = name print(f'name: {self.name}') def getName(self): return f'Father {self.name}' class Son(Father): def getName(self): return f'Son {self.name}' if __name__=='__main__': son = Son('runoob') print(son.getName())
輸出結果:
name: runoob Son runoob
-
情況二
子類重寫
__init__
方法,實例化后會覆蓋父類的__init__
方法,父類的__init__
方法不再執行。實例
class Father: def __init__(self, name): self.name = name print(f'name: {self.name}') def getName(self): return f'Father {self.name}' class Son(Father): def __init__(self, name): print("hi") self.name = name def getName(self): return f'Son {self.name}' if __name__=='__main__': son = Son('runoob') print(son.getName())
輸出結果:
hi Son runoob
-
情況三
子類重寫
__init__
方法,同時又需要調用父類的__init__
方法,使用super()
函數,super()是一個特殊函數,可以調用父類的__init__
方法。實例
class Father: def __init__(self, name): self.name = name print(f'name: {self.name}') def getName(self): return f'Father {self.name}' class Son(Father): def __init__(self, name): super().__init__(name) print("hi") self.name = name def getName(self): return f'Son {self.name}' if __name__=='__main__': son = Son('runoob') print(son.getName())
輸出結果:
name: runoob hi Son runoob