Python - クラス - 継承

公開日:2019-03-04 更新日:2019-05-29
[Python]

1. 概要

クラスの継承の方法です。
クラスを継承するには、「class クラス名(親クラス名)」とします。
クラスを継承すると、親クラスのメソッドは、子クラスでも使用することができます。

2.1 サンプル

class Test:
	def test(self):
		print("親クラスのメソッド")

class TestEx(Test):
	pass


obj = Test()
obj.test()

objEx = TestEx()
objEx.test()
親クラスのメソッド
親クラスのメソッド

2.2 オーバーライド

継承して親クラスのメソッドを上書き(オーバーライド)することができます。
また、子クラスから上書き前のメソッドを呼びたい場合は、super() を付けると呼ぶことができます。

class Test:
	def test(self):
		print("親クラスのメソッド")

class TestEx(Test):
	def test(self):
		super().test()
		print("子クラスのメソッド")


objEx = TestEx()
objEx.test()

親クラスのメソッド
子クラスのメソッド

2.3 抽象メソッド

抽象メソッドは、子クラスにメソッドの実装を強制するものです。
メソッドが実装されていない場合は、インスタンス生成時にエラーとなります。

抽象メソッドにするには、クラスに「(metaclass=ABCMeta)」を付けます。
次に、抽象メソッドにしたいメソッドに @abstractmethod を付けると、抽象メソッドになります。

from abc import ABCMeta, abstractmethod

class Test(metaclass=ABCMeta):
	def test(self):
		self.abstract_test()

	@abstractmethod
	def abstract_test(self):
		print("親クラスのメソッド")
		pass

class TestEx(Test):
	def abstract_test(self):
		print("抽象メソッド")


objEx = TestEx()
objEx.test()
抽象メソッド

2.4 親クラスから子クラスのメソッドの実行

Python では、定義時点で存在しないメソッドを使用しても、エラーになりません。
実際に実行してみて、メソッドがなかった場合にエラーとなります。

以下の例では、親クラスに存在しないメソッドを呼んでいますが、
子クラスでそのメソッドを実装することにより、実行時には問題なく動作しています。

class Test:
	def test(self):
		self.abstract_test()

class TestEx(Test):
	def abstract_test(self):
		print("抽象メソッド")


objEx = TestEx()
objEx.test()
抽象メソッド