Как вы вызываете экземпляр класса в 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 сравнения Java ()
  • Определение класса внутри другого класса и вызов родительского метода
  • Перегрузка оператора в Python: обработка различных типов и порядок параметров
  • Изменение экземпляра класса внутри метода экземпляра
  • Печать всех переменных в классе? - Python
  • Python: можно вызвать статический метод из класса без указания имени
  • Функция не будет успешно обрабатывать экземпляры класса, если содержимое не вводится вручную в консоли iPython
  • Метод класса, который ведет себя по-разному при вызове метода экземпляра?
  • изменить __slots__ динамически
  • Как установить и получить атрибут родительского класса из унаследованного класса в Python?
  • Python - лучший язык программирования в мире.