2008年5月14日水曜日

基底クラス関数の呼び出し

相変わらず python の話.
python で継承を行った際,
基底クラスがもつ関数と同じ名前の関数を継承したクラスでも定義して,
かつ基底クラスの関数を継承したクラスの同名関数から呼び出すには,という話.

19行目のように,super() を使って呼び出せば意図した挙動になる.
ただし,この書き方が理にかなっているかは未知.
基底クラスを継承したクラスで,基底クラスで実装した処理を実行しつつ
追加処理をしたいと思った時に,オーバライドするのではなく,
基底クラスの実装を活かしつつ実装をしたいと思ったのでやってみた.

  1 class Parent(object):
  2     def __init__(self):
  3         pass
  4 
  5     def __del__(self):
  6         pass
  7  
  8     def Print(self):
  9         print 'Parent: Hello World'
 10 
 11 class Child(Parent):
 12     def __init__(self):
 13         pass
 14     
 15     def __del__(self):
 16         pass
 17     
 18     def Print(self):
 19         super(Child, self).Print()
 20         print 'Child: Hello World'
 21         
 22 
 23 def main():
 24     child = Child()
 25     child.Print()
 26 
 27 #-------------------------------------------------
 28 if __name__ == "__main__":
 29     main()

0 件のコメント: