¿Cómo llamas a una instancia de una clase en Python?

Esto se inspira en una pregunta que acabo de ver, “Cambie lo que se devuelve al llamar a la instancia de clase“, pero se respondió rápidamente con __repr__ (y se aceptó, por lo que el interrogador no tenía la intención de llamar a la instancia).

Ahora llamando a una instancia de una clase se puede hacer así:

 instance_of_object = object() instance_of_object() 

pero obtendremos un error, algo como TypeError: 'object' object is not callable .

Este comportamiento se define en la fuente CPython aquí.

Así que para asegurarnos de que tenemos esta pregunta en Stackoverflow:

¿Cómo llamas a una instancia de una clase en Python?

Llamas a una instancia de una clase como en el siguiente:

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

Pero esto típicamente nos dará un error.

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

¿Cómo podemos llamar a la instancia como se pretende, y tal vez obtener algo útil de ella?

Tenemos que implementar el método especial de Python, __call__ !

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

Crea una instancia de la clase:

 a_knight = Knight() 

Ahora podemos llamar a la instancia de clase:

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

que imprime:

 ni! ichi ichi ichi pitang-zoom-boing! 

¡Y ahora, en realidad, y con éxito, hemos llamado una instancia de la clase!