サブクラスで親クラスのコンストラクタが必要な場合は、親クラスのコンストラクタを明示的に呼び出すか、親クラスのコンストラクタをオーバーライドしないようにします。
サブクラスがオーバーライドしない場合__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 サンプル