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()関数がベースクラスのインスタンスを返してくれてベースクラスのメソッドが使えるわけか。