基底クラスのメソッドを実行する手法を示します。
新形式の場合は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)
コメント