【Python3.x】__class__::__call__()メソッドの使い方
__call__メソッドの使い方について、初心者にもわかりやすく解説します。
作成日: 更新日:
基本的な使い方
__call__メソッドは、クラスのインスタンスを関数のように直接呼び出すことを可能にする特殊なメソッドです。このメソッドをクラス内に定義すると、そのクラスから作成されたオブジェクト(インスタンス)が、あたかも通常の関数であるかのように括弧 () を付けて実行できるようになります。
具体的には、あるクラスに__call__メソッドが実装されている場合、そのクラスのインスタンスを作成し、そのインスタンス名に続けて引数を伴う () を記述して呼び出すと、内部で定義された__call__メソッドが自動的に実行されます。これにより、オブジェクト自身が特定の処理を実行する「呼び出し可能なオブジェクト(callable object)」として振る舞うことが可能になります。
この機能は、内部に特定の状態(データ)を保持しながら、必要に応じて関数のように処理を実行させたい場合に特に有用です。例えば、設定値を記憶してそれに基づいて異なる結果を返すファクトリ関数や、引数によって動的に振る舞いを変更するストラテジーパターンなどを、シンプルかつ効率的に実装できます。__call__メソッドを活用することで、関数が持つ柔軟性とオブジェクトが持つ状態保持の特性を組み合わせ、より表現力豊かなコードを記述できるようになります。
構文(syntax)
1class CallableExample: 2 def __init__(self, initial_value): 3 self.value = initial_value 4 5 def __call__(self, arg1, arg2): 6 return self.value + arg1 + arg2 7 8# クラスのインスタンスを作成 9instance = CallableExample(10) 10 11# インスタンスを関数のように呼び出す 12result = instance(5, 3)
引数(parameters)
cls: type, *args: Any, **kwargs: Any
- cls: type: メソッドを呼び出すクラス自身
- *args: Any: 可変長引数(任意の数の位置引数)
- **kwargs: Any: 可変長キーワード引数(任意の数のキーワード引数)
戻り値(return)
オブジェクト
__call__ メソッドは、そのクラスのインスタンスを関数のように呼び出した際に実行されます。このメソッドの戻り値は、実際に行われた処理の結果として生成されたオブジェクトです。