Python - クラス - 継承
公開日:2019-03-04 更新日:2019-05-29
[Python]
1. 概要
クラスの継承の方法です。
クラスを継承するには、「class クラス名(親クラス名)」とします。
クラスを継承すると、親クラスのメソッドは、子クラスでも使用することができます。
クラスを継承するには、「class クラス名(親クラス名)」とします。
クラスを継承すると、親クラスのメソッドは、子クラスでも使用することができます。
2.1 サンプル
class Test:
def test(self):
print("親クラスのメソッド")
class TestEx(Test):
pass
obj = Test()
obj.test()
objEx = TestEx()
objEx.test()
親クラスのメソッド
親クラスのメソッド
2.2 オーバーライド
継承して親クラスのメソッドを上書き(オーバーライド)することができます。
また、子クラスから上書き前のメソッドを呼びたい場合は、super() を付けると呼ぶことができます。
また、子クラスから上書き前のメソッドを呼びたい場合は、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 を付けると、抽象メソッドになります。
メソッドが実装されていない場合は、インスタンス生成時にエラーとなります。
抽象メソッドにするには、クラスに「(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()
抽象メソッド