基底クラスのメソッドを実行する手法を示します。
新形式の場合はsuper(クラス, インスタンス)関数を使って以下のように実装できます。
class S(object):
def saySpam(self):
print 'Spam'
def __init__(self, name):
self.name = name
class C(S):
def __init__(self, name, age):
super(self.__class__, self).__init__(name)
self.age = age
def saySpam(self):
super(self.__class__, self).saySpam()
print 'Bacon'
実行してみます。
c = C('Spam', 24)
c.saySpam()
print c.name, c.age
→
# c.saySpam() : Spam Bacon # print c.name, c.age : Spam 24
ちなみに、
super(self.__class__, self).saySpam() super(self.__class__, self).__init__(name)
の部分は
super(C, self).saySpam() super(C, self).__init__(name)
と書いてもOKですが、 Effective Python Programming 77Pの "Use self.__class__ instead of hardcoded
class names" の方が良いかなと思ってそちらにしてみました。
新形式でない場合はsuper()が使えない為、普通にインスタンスをself引数として渡します。
super(self.__class__, self).__init__(name) -> S3.__init__(self, name)
super(self.__class__, self).saySpam() -> S3.saySpam(self)