home ホーム search 検索 -  login ログイン  | reload edit datainfo version cmd icon diff delete  | help ヘルプ

Python/codepiece/継承(2)

Python/codepiece/継承(2)

Python / codepiece / 継承(2)
id: 217 所有者: msakamoto-sf    作成日: 2009-03-21 20:00:50
カテゴリ: 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)


プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2009-03-21 20:10:00
md5:ad325f3edc11ca3083222dd9037d2158
sha1:2a8b19ff5c983bc2b17e66da2507ed1f565805f6
コメント
コメントを投稿するにはログインして下さい。