Как вы вызываете экземпляр класса в Python?

Это вдохновляет вопрос, который я только что видел: "Измените то, что возвращается, вызвав экземпляр класса", но был быстро ответил с помощью __repr__ (и принят, поэтому опрос не намеревался вызвать экземпляр).

Теперь вызов экземпляра класса может быть выполнен следующим образом:

instance_of_object = object() 
instance_of_object()

но мы получим ошибку, что-то вроде TypeError: 'object' object is not callable.

Это поведение определено в источнике CPaLo .

Итак, чтобы убедиться, что у нас есть этот вопрос в Stackoverflow:

Как вы на самом деле вызываете экземпляр класса в Python?

Ответ 1

Вы вызываете экземпляр класса следующим образом:

o = object() # create our instance
o() # call the instance

Но это, как правило, дает нам ошибку.

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'object' object is not callable

Как мы можем назвать экземпляр как предназначенный, и, возможно, извлечь из него что-то полезное?

Мы должны реализовать специальный метод Python, __call__!

class Knight(object):
    def __call__(self, foo, bar, baz=None):
        print(foo)
        print(bar)
        print(bar)
        print(bar)
        print(baz)

Создайте экземпляр класса:

a_knight = Knight()

Теперь мы можем вызвать экземпляр класса:

a_knight('ni!', 'ichi', 'pitang-zoom-boing!')

который печатает:

ni!
ichi
ichi
ichi
pitang-zoom-boing!

И теперь мы действительно и успешно называем экземпляр класса!