Python(抽象基底クラス)

抽象基底クラスとは空のメソッドだけ持つクラスで、そのまま使うことはないが、抽象基底クラスを継承する場合、空のメソッドをすべてオーバーライドしなければならない=クラス定義において「任意のメソッドを持つことを強制させる」役割があります。
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メソッドをコメントアウトした場合、以下のようにエラーが出て、未定義であることが指摘されます。
このように、抽象基底クラスを用いることでメソッドを強制させることができ、次回投稿のダック・タイピングを行う場合に活用できます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

Python

次の記事

Python(ダック・タイピング)