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