super 関数の返す値についてメモ
基底クラスに定義されたメソッドを派生クラスから呼びたい。たとえば基底クラスのメソッドをオーバーライドするとき、基底クラスのメソッドを呼んで元々の処理をした上で、独自の処理を追加したい。組込みの super 関数があるので調査してみた。
# kissa.py class Base: def test(self): print('this class is ' + repr(self.__class__)) class Kissa(Base): def test(self): print(self) print(self.__class__) print(super()) print(super().__class__) print(super(Kissa)) print(super(Kissa, self)) super().test()
実行してみる。
>>> import kissa >>> k = kissa.Kissa() >>> k.test() <kissa.Kissa object at 0xb09cc6c> <class 'kissa.Kissa'> <super: <class 'Kissa'>, <Kissa object>> <class 'super'> <super: <class 'Kissa'>, NULL> <super: <class 'Kissa'>, <Kissa object>> this class is <class 'kissa.Kissa'>
わかったこと。