Python(抽象基底クラス)
抽象基底クラスとは空のメソッドだけ持つクラスで、そのまま使うことはないが、抽象基底クラスを継承する場合、空のメソッドをすべてオーバーライドしなければならない=クラス定義において「任意のメソッドを持つことを強制させる」役割があります。
@abstractmethodのデコレータの付いたメソッドはオーバーライドする必要があります。
from abc import ABCMeta, abstractmethod
# 抽象基底クラスの定義
class MazeRobot(metaclass=ABCMeta):
@abstractmethod
def init_robot(self):
pass
@abstractmethod
def choose_dir(self):
pass
抽象基底クラスを使うにはabcモジュールを利用します。@abstractmethodのデコレータの付いたメソッドはオーバーライドする必要があります。
from abc_robot import MazeRobot
class MazeRobotTest(MazeRobot):
# 抽象基底クラスの継承で@abstractmethodは必ずオーバーライドが必要
def init_robot(self):
print("ロボットを初期化します")
def choose_dir(self):
print("前進します")
robot=MazeRobotTest()
robot.init_robot()
継承先でメソッドすべてをオーバーライドしていれば問題なく実行できますが、choose_dirメソッドをコメントアウトした場合、以下のようにエラーが出て、未定義であることが指摘されます。
このように、抽象基底クラスを用いることでメソッドを強制させることができ、次回投稿のダック・タイピングを行う場合に活用できます。