python クラスの継承 オーバーライド
説明の前に
下記のプログラムだと、親であるParentクラスと子であるChildクラスは同じである。
#親クラス class Parent(): def PrintGreeting(self): print("どうもこんにちは。") def PrintWho(self): print("わたしは親です") #子クラス class Child(Parent): pass
オーバライド
子クラス独自の出力をさせるため、PrintWhoメソッドを書き換えて、表示する内容を変えてみる。
これを【オーバーライド】という。
下記の例では、オーバライドでPrintWhoメソッドを変更した後に表示結果を確認し、PrintWhoメソッドが書き換わっていることを確認する。
#main_1-1.py #親クラス class Parent(): def PrintGreeting(self): print("どうもこんにちは。") def PrintWho(self): print("わたしは親です。") #子クラス class Child(Parent): def PrintWho(self): #←オーバライド print("ぼくはこどもです。親ではありません。") suzuki_ichiro = Parent() #親クラスのオブジェクト suzuki_taro = Child() #子クラスのオブジェクト #内容確認 print("suzuki_ichiro.PrintGreeting():実行結果") suzuki_ichiro.PrintGreeting() print("suzuki_ichiro.PrintWho():実行結果") suzuki_ichiro.PrintWho() print("suzuki_taro.PrintGreeting():実行結果") suzuki_taro.PrintGreeting() print("suzuki_taro.PrintWho():実行結果") suzuki_taro.PrintWho() #オーバーライドした個所の確認 ''' 【実行結果】 suzuki_ichiro.PrintGreeting():実行結果 どうもこんにちは。 suzuki_ichiro.PrintWho():実行結果 わたしは親です。 suzuki_taro.PrintGreeting():実行結果 どうもこんにちは。 suzuki_taro.PrintWho():実行結果 ぼくはこどもです。親ではありません。 '''
上記の結果から、子クラスでPrintWhoメソッドを書き換えができていることがわかる。
また、オーバライドを行っていないPrintGreetingメソッドは、親メソッドのものと変わっていない。