super関数
super()関数を使うとベースクラスのメソッドを呼べるみたい。
具体的に試してみる。
まずはOneというクラスを作ってメソッドを定義して、Oneクラスを継承するTwoというクラスを作る。
>>> class One(object): ... def fone(self): ... print "one" ... >>> class Two(One): ... pass ...
次にTwoクラスのインスタンスを作っておく。
>>> t = Two() >>> t <__main__.Two object at 0x00D665B0>
それでsuper関数を使って次のように書いてやると、
>>> super(Two, t).fone <bound method Two.fone of <__main__.Two object at 0x00D665B0>>
第1引数にはクラス名、第2引数にはそのクラスインスタンスを与えてやるとbound method
が返ってきてる。そのままfoneメソッドを使ってやると,
>>> super(Two, t).fone() one
となってfoneメソッドの実行結果が返ってくる。
super()関数がベースクラスのインスタンスを返してくれてベースクラスのメソッドが使えるわけか。