В обоих Python 2 и Python 3 код:
class Foo(object):
pass
f = Foo()
f.__call__ = lambda *args : args
f(1, 2, 3)
возвращается как ошибка Foo object is not callable
. Почему это происходит?
PS: В классах старого стиля он работает как ожидалось.
PPS: Это поведение предназначено (см. принятый ответ). В качестве рабочего решения можно определить __call__
на уровне класса, который просто пересылается другому члену и устанавливает этот "нормальный" член в реализацию для каждого экземпляра __call__
.