一年目エンジニア

n年目です。

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メソッドは、親メソッドのものと変わっていない。

入門 Python 3