Pythonのコードリーディングをしていると、時折__call__
という関数を見ることがあります。
__init__
とは違い、見る機会はそれほど多くありませんが、覚えておくと便利なので紹介します。
__call__
とは__call__
はPythonの特別な関数で、クラスのインスタンスを関数のように呼び出すことを可能にします。
インスタンスが関数として呼び出されるとき、__call__
メソッドが定義されていると以下のように認識されます。
__call__
の使い方例として次のコードを書いてみましょう。
上記のコードが実行されると、次のように出力されます。
__init__
はExample
クラスのインスタンスが生成されるときに呼び出されます。
それと比較して__call__
は、インスタンスが関数として呼び出されるときに出力されていることがわかります。
__call__
を使うメリットPythonのクラスで__call__
を使うメリットをいくつか紹介します。
__call__
を定義することで、そのクラスのインスタンスを関数のように呼び出せます。これにより、オブジェクトの使い方がより柔軟になり、コードがより読みやすく簡潔になります。callable
callable
オブジェクトを作成できます。複数の呼び出しにわたってクラスオブジェクトに関するデータを追跡する必要がある場合に便利です。まとめると、__call__
はクラスオブジェクトを再利用する際に使用を検討するべき特殊関数です。
小さなアプリケーションや使い捨てのコードでは使う機会はありませんが、より大きく複雑なシステムを開発するときに有用です。
使うべき機会はさほど多くありませんが、こういう書き方もできるということを覚えておくとよりスキルアップにつながります。