抽象クラス
抽象クラス ▲
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# からスタートしたので使いたいと思ってしまうが
目次