python的子類繼承父類構造函數說明
- 2019 年 10 月 5 日
- 筆記
原文鏈接:https://www.runoob.com/w3cnote/python-extends-init.html
如果在子類中需要父類的構造方法就需要顯式地調用父類的構造方法,或者不重寫父類的構造方法。
子類不重寫 __init__,實例化子類時,會自動調用父類定義的 __init__。
實例
class Father(object): def __init__(self, name): self.name=name print ( "name: %s" %( self.name) ) def getName(self): return 'Father ' + self.name class Son(Father): def getName(self): return 'Son '+self.name if __name__=='__main__': son=Son('runoob') print ( son.getName() )
輸出結果為:
name: runoob Son runoob
如果重寫了__init__ 時,實例化子類,就不會調用父類已經定義的 __init__,語法格式如下:
實例
class Father(object): def __init__(self, name): self.name=name print ( "name: %s" %( self.name) ) def getName(self): return 'Father ' + self.name class Son(Father): def __init__(self, name): print ( "hi" ) self.name = name def getName(self): return 'Son '+self.name if __name__=='__main__': son=Son('runoob') print ( son.getName() )
輸出結果為:
hi Son runoob
如果重寫了__init__ 時,要繼承父類的構造方法,可以使用 super 關鍵字:
super(子類,self).__init__(參數1,參數2,....)
還有一種經典寫法:
父類名稱.__init__(self,參數1,參數2,...)
實例
class Father(object): def __init__(self, name): self.name=name print ( "name: %s" %( self.name)) def getName(self): return 'Father ' + self.name class Son(Father): def __init__(self, name): super(Son, self).__init__(name) print ("hi") self.name = name def getName(self): return 'Son '+self.name if __name__=='__main__': son=Son('runoob') print ( son.getName() )
輸出結果為:
name: runoob hi Son runoob