Estoy usando Python 2.7.2. Quiero entender la relación entre llamar a una función y llamar al atributo __call__
de la función. Por ejemplo, considere el siguiente códigoFunciones de Python y su atributo __call__
def foo():
return 5
print foo() # ==> 5
print foo.__call__() # ==> 5
foo.__call__ = lambda : 6
print foo() # ==> 5
print foo.__call__() # ==> 6
Las primeras cuatro líneas parecen indicar la llamada a la función foo
es lo mismo que llamar el atributo __call__
de foo
. Sin embargo, las últimas tres líneas parecen indicar que son bestias diferentes ya que cambié el atributo __call__
pero no cambió el valor devuelto por una llamada al foo()
.
¿Alguien puede explicar la relación entre llamar al foo()
y llamar al foo.__call__()
? ¿Hay alguna manera de modificar el comportamiento de la función para que foo()
así como foo.__call__()
ahora devuelva 6 en lugar de 5?
Nunca hay una razón para modificar 'foo .__ call__' - ¡podría simplemente modificar' foo' en su lugar! – katrielalex
sin embargo, es un comportamiento extraño. buena pregunta –