2012-04-23 12 views
16

En python puede hacer que las instancias se puedan llamar implementando el método __call__. Por ejemploCuándo debería implementar __call__

class Blah: 
    def __call__(self): 
     print "hello" 

obj = Blah() 
obj() 

Pero también se puede poner en práctica un método de la mía, decir 'run':

class Blah: 
    def run(self): 
     print "hello" 

obj = Blah() 
obj.run() 

Cuando debo aplicar __call__?

+9

Cuando tenga sentido. –

+12

Si no está seguro si necesita '__call__', entonces no necesita' __call__'. –

Respuesta

19

Esto es difícil de responder. Mi opinión es que nunca debes definir __call__ a menos que tu objetivo real sea crear una función. No es algo que harías después de que ya hayas creado un objeto tradicional.

En otras palabras, si está empezando a pensar "Voy a crear un objeto", nunca debería terminar implementando __call__. Si, por otro lado, comienzas a pensar "Voy a crear una función ... pero desearía poder usar el marco de objetos para que mi función tenga algún estado", entonces podrías crear la función como un objeto con state, y define __call__ para que actúe como una función.

quiero incluir un último poco de asesoramiento que fue proporcionada por @Paul Manta en un comentario a la pregunta, donde escribió:

Si no está seguro si necesita __call__, entonces no lo hace necesita __call__

Creo que es un buen consejo.

+0

+1 - A veces, los cierres simplemente se convierten en un desastre indescriptible, y un objeto invocable es un mejor enfoque. Pero eso es todo. – detly

Cuestiones relacionadas