home Glamenv-Septzen(ぐらめぬ・ぜぷつぇん)(archive)

Python/codepiece/継承(2)

作成日: 2009-03-21 20:00:50   /   last updated at: 2009-03-21 20:10:00
カテゴリ: Python 

基底クラスのメソッドを実行する手法を示します。

super()を使う(新形式のみ)

新形式の場合は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)

original url: https://www.glamenv-septzen.net/view/217