NotImplementedError
「このメソッドはまだ実装されていません」ということを意図的に知らせるためのエラーです。抽象クラスの設計でよく使われます。
原因
親クラス側でメソッドの中身を書かずにraiseしておき、子クラスがそのメソッドをオーバーライドし忘れていることが原因です。
エラーになるコード例
class Animal:
def speak(self):
raise NotImplementedError('speak()は子クラスで実装してください')
class Dog(Animal):
pass
Dog().speak()修正版
class Animal:
def speak(self):
raise NotImplementedError('speak()は子クラスで実装してください')
class Dog(Animal):
def speak(self):
print('ワンワン!')
Dog().speak()よくある間違い
- 子クラスで、親クラスが要求しているメソッドの実装を忘れる
- abcモジュールの@abstractmethodと役割が似ているため混同する(NotImplementedErrorは実行時に気づく、abcは定義時点で強制できるという違いがある)