¿Cómo usar __call__?

Por ejemplo, necesito para la clase llamada devuelve cadena.

class Foo(object): def __init__(self): self.bar = 'bar' def __call__(self): return self.bar 

Foo llamando devuelve el Foo object .

 Foo()  

¿Qué debo hacer para que la clase devuelva cadena u otra? ¿Cómo usar __call__ ?

Con su ejemplo (de utilidad limitada), tiene una clase de objetos que se pueden llamar.

Puedes hacerlo ahora, como lo has hecho,

 >>> o = Foo() >>> o <__main__.Foo object at 0x8ff6a8c> >>> o() 'bar' 

I. e., __call__() no hace que su clase sea reclamable (como ya lo está), pero le da un objeto invocable.

En Python, todo es un objeto. Incluso clases .

Las clases, además, son objetos callables. No tienes que hacer nada para que esto suceda, simplemente lo son. Llamar a la clase crea una instancia.

Configurar un método __call__ hace que las instancias también sean invocables. Llama a las instancias de la misma manera que llamó a la clase (o cualquier otra función).

 In [1]: class A: ...: def __init__(self): ...: print "init" ...: ...: def __call__(self): ...: print "call" ...: ...: In [2]: a = A() init In [3]: a() call