Pythonシンタックス __call__

Pythonコードで以下の様なシンタックスに出くわした。

A()(a, b)

初見、A()の戻り値とタプル(a, b)の積かなと思ったが、積演算子がない。

A()の引数を外側受け取る記述?そんなのあったっけ?と脳内検索。

Aのクラス定義みると __init__, __repr__, __call__ の特殊メソッドの実装のみ。

__init__ もしくは、__call__ になるかな。

__call__ メソッドあまり使ったことないのでググると、

クラスのインスタンス Instances of arbitrary classes can be made callable by defining a call() method in their class.

3. データモデル — Python 3.10.6 ドキュメント

インスタンスがcallableになる。

なので、

A()(a, b)

は、以下を端折った記法のようでした。

a = A()
a(a, b) # __call__ が呼び出される