Python でスーパークラスのインスタンスメソッドを呼び出すときに使える super() 関数の使い方をご紹介します。
Python 3 の場合
まずは例を見てください。
class Dog:
def __init__(self, name):
self.name = name
class UltraDog(Dog):
def __init__(self, name, type_):
super().__init__(name)
self.type = type_
ud1 = UltraDog("taro", "akita")
print(ud1.name)このコードでは、 Dog のサブクラス UltraDog の __init__() メソッドの中で super().__init__(name) という書き方を使ってスーパークラス Dog の __init__() メソッドを呼び出しています。
Python 2 の場合
Python 2 の場合は Python 3 と少し違って、 super() 関数には 2 つの引数を渡す必要があります。具体的には super(クラス, インスタンス自身) とやって使います。
わざわざ引数を渡さなくてはいけないのは少し気持ち悪い・煩わしい感じがします。
上のサンプルは Python 2 では次のようになります。
class Dog(object):
def __init__(self, name):
self.name = name
class UltraDog(Dog):
def __init__(self, name, type_):
super(UltraDog, self).__init__(name)
self.type = type_
ud1 = UltraDog("taro", "akita")
print(ud1.name)Python 2 における注意点として、スーパークラス(このサンプルでは Dog )で object クラスを継承する必要があります。これを忘れると super() がきちんと動いてくれず「 TypeError: must be type, not classobj 」というエラーがあがります。