abcモジュールで抽象クラス、抽象メソッドを作成する

Pythonは動的型づけというゆるい感じの片付けなので、サブクラスにメソッド実装を強制するような作りが(言語仕様としては)できないが、abcモジュールを使うことで抽象クラス・抽象メソッドを作成することができる。

抽象クラスは、metaclassにabc.ABCMetaを指定して作成し、抽象メソッドには@abstractmethodデコレータを指定する。

from abc import ABCMeta, abstractmethod

class Shape(metaclass=ABCMeta):
    @abstractmethod
    def area(self):
        pass

具象クラスは、普通にスーパークラスに指定して作成する。

class Circle(Shape):
    def __init__(self, r):
        self.r = r

    def area(self):
        return pi * self.r ** 2

c = Circle(10)
c.area()

areaメソッドは、抽象メソッドになっているので実装しない場合には、インスタンス生成時にTypeErrorが発生する。

TypeError: Can't instantiate abstract class Circle with abstract methods area

エラーが発生するのは、インスタンス生成時でclassを定義した時点では発生しないので注意が必要。

29.7. abc — 抽象基底クラス — Python 3.4.3 ドキュメント

関連記事:

コメントを残す

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

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)