[Python- es] ¿Cierres en Python?

Andrés Marzal Varo amarzal en lsi.uji.es
Mie Ago 7 18:40:09 CEST 2002


Mensaje citado por Esteban Manchado Velázquez 
<zoso en demiurgo.org>: 
 
 
Prueba con esto: 
 
class Clase: 
   def __init__(self): 
      # ...            
      self.f = lambda con, msg, s=self: 
s.nuevoMensaje(con, msg) 
      self.jabber.setMessageHandler(self.f)                 
 
   def nuevoMensaje(self, con, msg): 
      print "He recibido un nuevo mensaje con el texto 
%s" % msg 
 
Si no te he entendido mal, tienes el mismo problema que 
surge al tartar de meter lambda-funciones como callbacks 
en aplicaciones que usan Tkinter. En ese otro contexto, 
el problema se soluciona como ves: se crea un parámetro 
con valor por defecto (le he llamado s, pero puedes 
llamarle self) y se le asigna el valor por defecto self. 
El valor por defecto se establece en el contexto de 
ejecución de creación de la lambda-función, así que 
debería solucionar tu problema. 
 
Salud. 
 
Andrés. 





Más información sobre la lista de distribución Python-es