Когда следует реализовать __call__ - программирование
Подтвердить что ты не робот

Когда следует реализовать __call__

В python вы можете сделать экземпляры вызываемыми, реализуя метод __call__. Например

class Blah:
    def __call__(self):
        print "hello"

obj = Blah()
obj()

Но я также могу реализовать собственный метод, скажем, "run":

class Blah:
    def run(self):
        print "hello"

obj = Blah()
obj.run()

Когда мне следует реализовать __call__?

4b9b3361

Ответ 1

Трудно ответить. Мое мнение таково, что вы никогда не должны определять __call__, если только ваша фактическая цель - создать функцию. Это не то, что вы сделали бы, если уже создали традиционный объект.

Другими словами, если вы начинаете думать "Я собираюсь создать объект", вы никогда не должны заканчивать реализацию __call__. Если, с другой стороны, вы начинаете думать: "Я собираюсь создать функцию... но я бы хотел, чтобы я мог использовать объектную среду, чтобы моя функция имела какое-то состояние", тогда вы могли бы создать функцию как объект с и определите __call__, чтобы заставить его действовать как функция.

Я хочу включить один последний совет, который был предоставлен @Paul Manta в комментарии к вопросу, где он писал:

Если вы не уверены, что вам нужно __call__, вам не нужно __call__

Я думаю, что это хороший совет.