初めてのsuper()メソッド

エキスパートPythonの中でsuper()メソッドのことが書かれていたんですが、super()メソッドを使ったことがなかったので少し調べました。


super()メソッドは第一引数に指定されたクラスの親クラスを返すメソッドで、以下のようなクラスの継承で使うことができます。



OyaクラスをKodomoクラスで継承し、Oyaクラスのspamメソッドを実行するKodomoクラスのeggsメソッドを実装した例です。

class Oya(object):
    def spam(self):
        print "I am a father"

class Kodomo(Oya):
    def eggs(self):
        super(Kodomo, self).spam()

c = Kodomo()
c.eggs()
c.spam() // 直接親クラスのメソッドを呼び出している例です。


これを実行すると、当然、こう表示されます。

I am a father
I am a father

これをsuper()メソッドを使わずに書くとこうなります。

class Oya():
    def __init__(self):
        pass

    def spam(self):
        print "I am a father"


class Kodomo(Oya):
    def __init__(self):
        Oya.__init__(self)

    def eggs(self):
        self.spam()

c = Kodomo()
c.eggs()