最終更新
Pythonのコードリーディングをしていると、時折__call__という関数を見ることがあります。
__init__とは違い、見る機会はそれほど多くありませんが、覚えておくと便利なので紹介します。
HackATAは、エンジニアを目指す方のためのプログラミング学習コーチングサービスです。 経験豊富な現役エンジニアがあなたの学習をサポートします。
✓ 質問し放題
✓ β版公開中(2025年内の特別割引)
__call__とは__call__はPythonの特別な関数で、クラスのインスタンスを関数のように呼び出すことを可能にします。
インスタンスが関数として呼び出されるとき、__call__メソッドが定義されていると以下のように認識されます。
__call__の使い方例として次のコードを書いてみましょう。
上記のコードが実行されると、次のように出力されます。
__init__はExampleクラスのインスタンスが生成されるときに呼び出されます。
それと比較して__call__は、インスタンスが関数として呼び出されるときに出力されていることがわかります。
__call__を使うメリットPythonのクラスで__call__を使うメリットをいくつか紹介します。
__call__を定義することで、そのクラスのインスタンスを関数のように呼び出せます。これにより、オブジェクトの使い方がより柔軟になり、コードがより読みやすく簡潔になります。callablecallableオブジェクトを作成できます。複数の呼び出しにわたってクラスオブジェクトに関するデータを追跡する必要がある場合に便利です。まとめると、__call__はクラスオブジェクトを再利用する際に使用を検討するべき特殊関数です。
小さなアプリケーションや使い捨てのコードでは使う機会はありませんが、より大きく複雑なシステムを開発するときに有用です。
使うべき機会はさほど多くありませんが、こういう書き方もできるということを覚えておくとよりスキルアップにつながります。