Ответ 1
Трудно ответить. Мое мнение таково, что вы никогда не должны определять __call__
, если только ваша фактическая цель - создать функцию. Это не то, что вы сделали бы, если уже создали традиционный объект.
Другими словами, если вы начинаете думать "Я собираюсь создать объект", вы никогда не должны заканчивать реализацию __call__
. Если, с другой стороны, вы начинаете думать: "Я собираюсь создать функцию... но я бы хотел, чтобы я мог использовать объектную среду, чтобы моя функция имела какое-то состояние", тогда вы могли бы создать функцию как объект с и определите __call__
, чтобы заставить его действовать как функция.
Я хочу включить один последний совет, который был предоставлен @Paul Manta в комментарии к вопросу, где он писал:
Если вы не уверены, что вам нужно
__call__
, вам не нужно__call__
Я думаю, что это хороший совет.