1. ホーム

raise NotImplementedError

2022-02-14 19:38:47

 Pythonプログラミングのraiseでは、エラーを発生させる機能があり、その条件はプログラマがカスタマイズすることが可能です。オブジェクト指向プログラミングでは、親クラスでは未実装のメソッドインターフェースを残し、その子クラスで実装することができます。その子クラスが実装を要求されている場合、非実装が問題になるのであれば、raiseの手法を使うのが良い。そして、この時に発生する問題の分類がNotImplementedErrorです。

class FatherClass:
  def func(self):
    raise NotImplementedError("ERROR: func not implemented!")

class ChildClass(FatherClass):
  pass

obj = ChildClass()
obj.func()

上記の例では、子クラスは親クラスのfunc関数を実装しておらず、子クラスでクラスオブジェクトを生成してもエラーになりませんが、親クラスのfunc関数を呼び出すと、以下のエラーがポップアップ表示されることになります。

Traceback (most recent call last):
  File "/media****/test.py", line 111, in <module>
    obj.func()
  File "/media****/test.py", line 104, in func
    raise NotImplementedError("ERROR: func not implemented!")
NotImplementedError: ERROR: func not implemented!

つまり、親クラスの func 関数を呼び出すとき、python はその関数がサブクラスで実装されているかどうかを自動的に認識します。

上記のエラーを修正するには、以下のように親クラスのfunc関数をサブクラスで実装するだけです。

class FatherClass:
  def func(self):
    raise NotImplementedError("ERROR: func not implemented!")

class ChildClass(FatherClass):
  def func(self):
    print("hello world!")

obj = ChildClass()
obj.func()

実行結果は次のようになります。

hello world!