Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【Python3.x】Exception::__new__()メソッドの使い方

__new__メソッドの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

__new__メソッドは、Exceptionクラスのインスタンス、すなわち例外オブジェクトが生成される際に実行される特殊なメソッドです。

Pythonにおいて、クラスのインスタンスがメモリ上に構築される際に、__new__メソッドが最初に呼び出されます。このメソッドの主な役割は、新しいインスタンスのためのメモリ領域を確保し、そのインスタンスオブジェクト自体を生成して返すことです。多くの場合、インスタンスの初期化を行う__init__メソッドと混同されがちですが、__init__は__new__によって生成されたインスタンスに対して、属性の初期値設定などの処理を行う役割を持っています。つまり、__new__はインスタンスを「作る」ことに特化し、__init__は「初期設定を行う」ことを担当します。

Exceptionクラスにおける__new__メソッドは、raise文などを用いてExceptionクラス、またはそれを継承したカスタム例外クラスのオブジェクトが作成される際に、その内部で自動的に呼び出されます。これにより、エラーに関する情報(例えばエラーメッセージ)を適切に格納できる例外オブジェクトが構築され、プログラムの実行フローを制御するための準備が整います。

通常、プログラマがExceptionの__new__メソッドを直接呼び出したり、自身のカスタム例外クラスでこれをオーバーライドしたりすることは稀です。Pythonのデフォルトの実装が、ほとんどの利用シナリオにおいて適切に機能するためです。しかし、オブジェクトの生成プロセス自体を根本的にカスタマイズしたい、といった非常に特殊なケースでのみ、この__new__メソッドが利用されることがあります。これは、Pythonのオブジェクト生成メカニズムの基盤をなす重要な要素の一つです。

構文(syntax)

1error_instance = Exception.__new__(Exception, "ファイルが見つかりません", 404, file_path="/tmp/nonexistent.txt")

引数(parameters)

cls, *args, **kwargs

  • cls: 呼び出されるクラス自身
  • *args: 位置引数
  • **kwargs: キーワード引数

戻り値(return)

Exception

new メソッドは、例外オブジェクトの新しいインスタンスを生成して返します。

関連コンテンツ