ソースに絡まるエスカルゴ

貧弱プログラマの外部記憶装置です。

【python】クラスの継承

rikoubou.hatenablog.com

 一つ前の記事では単体テストをやりました。今回はタイトルにある通りpythonでのクラスの継承です。

 正直参考資料のページを参照した方がわかりやすいかと思いますが、自分のための備忘録として記事に残しておきます。

 では始めます。


・継承の記述方法
 pythonでのクラスの継承の記述方法は簡単で以下の通りです。

class 新しいクラス名(継承元クラス名):
	# 以下略

 継承元の関数をそのまま使いたい場合は特に何も記述する必要はありません。
 逆に継承元の関数の内容を上書きしたい場合は、単純に同じ関数名で記述すればOKです。

 具体例として以下の単純なクラスの継承例を作りました。

#
# 継承テスト例
#

# 継承元のクラス
class ParentClass():
	def __init__(self, name):
		self.name = name
	
	def showName(self):
		print("Parent name is ", self.name)

# ParentClassを継承したクラス1
class ChildClass1(ParentClass):
	def showChildName(self):
		"""
		showChildName関数を新たに追加
		"""
		print("showChildName is ", self.name)

# ParentClassを継承したクラス2
class ChildClass2(ParentClass):
	def showName(self):
		"""
		showName関数を上書き
		"""
		print("Child2 name is ", self.name)

 また上記の内容を呼び出して実行するプログラムが以下の通りです。

# import文は省略

# メイン関数
def main():
	parent = ParentClass("Parent")
	parent.showName()

	child1 = ChildClass1("child1")
	child1.showName()
	child1.showChildName()

	child2 = ChildClass2("child2")
	child2.showName()

if __name__ == '__main__':
    main()

 上記を実行すると以下のような結果になります。
f:id:rikoubou:20190220162707p:plain

 2行目は「ChildClass1」からshowName関数を呼んだ結果が表示されています。ChildClass1自体にはshowName関数の記述は一切ありませんが、継承元の「ParentClass」に記述されているshowName関数が呼ばれているのがわかります。

 3行目は「ChildClass1」に新しく追加した関数であるshowChildName関数の結果が表示されています。

 4行目は「ChildClass2」で継承元の内容を上書きしたshowChildName関数の結果がちゃんと表示されています。


 以上がpythonでのクラスの継承方法です。

 似たような機能だけど少し違う、または元の機能にちょっとだけ追加するクラスが必要になった場合にはこの継承機能にお世話になることになると思います。


・参考資料