1. ホーム 
  2. 備忘録 
  3. Python

抽象クラス

抽象クラス

Pythonで抽象クラスを扱うには ABC というモジュールをインポートする必要がある

abc.ABCMeta というメタクラスを継承し、実装を強制したいメソッドに @abc.abstractmethod と抽象メソッドを示すデコレータをつける

具体的なコードの例を以下に記載する

lesson.py

import abc

class Person(metaclass=abc.ABCMeta):
    def __init__(self, age):
        self.age = age

    @abc.abstractmethod
    def drive(self):
        pass


class Baby(Person):
    def __init__(self, age=1):
        if age < 18:
            super().__init__(age)
        else:
            raise ValueError

    def drive(self):
        raise Exception('No drive')


class Adult(Person):
    def __init__(self, age=18):
        if age >= 18:
            super().__init__(age)
        else:
            raise ValueError

    def drive(self):
        print('ok')

# メソッドの実装漏れがある場合下記のエラーがでる
# TypeError: Can't instantiate abstract class Adult with abstract method drive

Pythonにはもともとインターフェースや抽象クラスといった概念がなかったが、Javaで実装されていたので、Pythonが新しくなる上で作られていった

しかし、特に使う必要がなければ使わなくてよい。コードスタイルの方でもあまり対応しない方が良いとされている(らしい)

私は C# からスタートしたので使いたいと思ってしまうが