[Python-es] RE: [Python-es] RE: [Python-es] ¿Cierres en Python?
Hernan Martinez Foffani
hernan en orgmf.com.ar
Mie Ago 7 16:39:57 CEST 2002
> > ¿tiene que ser nuevoMensaje() un metodo de la clase?
>
> No necesariamente, pero tiene que tener alguna forma de saber
> cuál es el objeto que registró la función de recepción de mensaje.
> La única solución que se me ocurre para que una función tenga
> «consciencia» de un valor es que esa función sea un método....
> o usar un cierre.
el problema de pasarle un metodo es que perdes la referencia al
objeto porque precisamente estas pasando el metodo y no el objeto.
pero esto ya lo sabes :-)
python no tiene cierres. quizás te sirva atributos de funciones:
def f(msg):
print ">", msg, f.objeto
f.objeto = [1,2,3]
> > ¿cual es la interfaz de jabber.setMessageHandler()?
>
> La definición completa es
>
> ------------------------- 8< -------------------------
> def setMessageHandler(self, func, type='default'):
> """Sets a the callback func for recieving messages
> Mulitple callback functions can be set which are
> called in succession. A type attribute can also be
> optionally passed so the callback is only called when a
> message of this type is recieved.
> """
en ningun lado te dice de los 2 parametros (con y msg). supongo
que lo habrás sacado del codigo u otro lado.
> Algo parecido se me había ocurrido, pero me hice un lío y no di con la
> solución. Probando algo similar a lo que propones, da otro error en la
> llamada, porque al objeto le falta el atributo «func_code».
> Supongo que debe ser algo interno de las funciones.
mmm... podría ser que la implementación está chequeando que sea una funcion
real, y no un callable. si el callback fuera invocado con
apply(objeto_callback, [parametro_con, parametro_msg])
no tendrías mayores problemas. sospecho que está chequeando de mas.
> PD: Por cierto, ¿no se supone que añadieron cierres a Python
> 2.2? Yo uso 2.1, es sólo por curiosidad.
lo que se agregaron fueron los "nested scopes". que es una condicion
necesaria (pero no suficiente) para tener cierres en python.
-Hernan
Más información sobre la lista de distribución Python-es