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 」というエラーがあがります。