NotImplementedError: Subclasses should implement this! の原因と対処法

Last Updated on 2025年7月28日

概要

Pythonで開発をしていると、NotImplementedError: Subclasses should implement this! というエラーに遭遇することがあります。このエラーは、オブジェクト指向プログラミングの基本である「継承」に関わるもので、基底クラスのメソッドをサブクラスで適切にオーバーライドしていない場合に発生します。
この記事では、このエラーの意味、発生する原因、解決方法、そして補足情報をわかりやすく解説します。

目次

エラー内容

このエラーは以下のようなメッセージで表示されます:

主に、基底クラス(親クラス)で定義されたメソッドにNotImplementedErrorが書かれているのに、子クラス(サブクラス)でそのメソッドを実装していない場合に発生します。これは、開発者に対して「このメソッドは必ずサブクラスで実装してください」という意図を伝える仕組みです。

原因

このエラーの原因は、次のようなコード構造にあります。

このように、基底クラスBaseprocess()メソッドにNotImplementedErrorを仕込んでおり、派生クラスDerivedでそれをオーバーライドせずに使用しようとすると、エラーになります。

背景にある意図

PythonにはJavaやC#のような抽象クラスインターフェースの明確な構文がありません。その代替として、NotImplementedErrorを使って「このメソッドはオーバーライド必須ですよ」と強制するテクニックが使われます。

対処法

エラーを解消するには、サブクラスで該当メソッドを必ずオーバーライドする必要があります。

推奨:abcモジュールを使った抽象クラスの定義

Pythonのabcモジュールを使うと、より明示的に抽象クラスを定義できます。

@abstractmethodデコレーターを使うと、実装していない場合にインスタンス化そのものが禁止されるため、より安全に設計できます。

注意点:間違った実装の例

以下のようにメソッドを呼び出さない場合にはエラーになりませんが、これは問題を先送りにしているだけです。

将来的に呼び出されたときにエラーが発生するため、必ず実装するようにしましょう。

補足

NotImplementedErrorとNotImplementedの違い

  • NotImplementedError はエラー(例外)であり、実装されていないことを明示するために raise されます。
  • NotImplemented は値(オブジェクト)であり、演算子オーバーロードの際に使用されます(例:__eq____lt__など)。

自作ライブラリ開発時の使い所

NotImplementedErrorは、自作のライブラリやフレームワークを開発する際に「設計の意図」を明示するのに非常に有効です。将来の保守性・可読性を考慮して積極的に活用するのが良い設計となります。

まとめ

  • NotImplementedErrorは、サブクラスで必須のメソッドが未実装である場合に発生します。
  • このエラーは、継承ベースの設計において「オーバーライドを強制する」ために使われます。
  • サブクラス側で該当メソッドをきちんと実装することで回避可能です。
  • より安全な設計のために、abcモジュールを使うことを推奨します。
  • NotImplementedErrorNotImplementedは別物であることに注意しましょう。

Pythonでの設計ミスや不具合を防ぐためにも、このエラーの意味をしっかりと理解しておくことが重要です。