エラー辞典

NotImplementedError

「このメソッドはまだ実装されていません」ということを意図的に知らせるためのエラーです。抽象クラスの設計でよく使われます。

原因

親クラス側でメソッドの中身を書かずにraiseしておき、子クラスがそのメソッドをオーバーライドし忘れていることが原因です。

エラーになるコード例

class Animal:
    def speak(self):
        raise NotImplementedError('speak()は子クラスで実装してください')

class Dog(Animal):
    pass

Dog().speak()
NotImplementedError: speak()は子クラスで実装してください

修正版

class Animal:
    def speak(self):
        raise NotImplementedError('speak()は子クラスで実装してください')

class Dog(Animal):
    def speak(self):
        print('ワンワン!')

Dog().speak()

よくある間違い

  • 子クラスで、親クラスが要求しているメソッドの実装を忘れる
  • abcモジュールの@abstractmethodと役割が似ているため混同する(NotImplementedErrorは実行時に気づく、abcは定義時点で強制できるという違いがある)

← エラー辞典に戻る