サブクラスで親クラスのコンストラクタが必要な場合は、親クラスのコンストラクタを明示的に呼び出すか、親クラスのコンストラクタをオーバーライドしないようにします。

サブクラスがオーバーライドしない場合__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('サンプル') print ( son.getName() )

出力結果は:

name: サンプル
Son サンプル

もしオーバーライドした場合は__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('サンプル') print ( son.getName() )

出力結果は:

hi
Son サンプル

もしオーバーライドした場合__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('サンプル') print ( son.getName() )

出力結果は:

name: サンプル
hi
Son サンプル