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

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

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

 instance_of_object = object() instance_of_object() 

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

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

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

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

One Solution collect form web for “Как вы вызываете экземпляр класса в Python?”

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

 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! 

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

  • как сохранить / прочитать класс целиком в Python
  • Печать всех переменных в классе? - Python
  • Ошибка при вызове баз метакласса: аргумент функции () должен быть кодом, а не str
  • `object .__ setattr __ (self, ..., ...)` вместо `setattr (self, ..., ...)`?
  • В объекте класса, как автоматически обновлять атрибуты?
  • Переменные экземпляра в сравнении с переменными класса в Python
  • Python: протоколирование всех методов класса без оформления каждого из них
  • Должен ли игрок наследовать или владеть уровнем?
  • Python - лучший язык программирования в мире.