[Python-es] ¿Cierres en Py thon?
Jose Alejandro Perez Rubio
perezj en si.uji.es
Jue Ago 8 09:53:22 CEST 2002
Buenos días,
He leído el problema que se describía inicialmente, y parece que la
solución pasa por crear una función lambda con un valor por defecto en
uno de sus parámetros. Pero yo he probado esto:
$ python2.2
>>> class foo :
... def __init__( self, m ):
... self.msg = m
... def handler( self, x,y ):
... print "Soy %s %d %d" % ( self.msg, x, y )
...
>>> f = foo( "Luis" )
>>> a = f.handler
>>> a( 3,4 )
Soy Luis 3 4
Cuando llamamos se ejecuta 'a( 3,4 )' estamos llamando a la metodo
handler de la instacia contenida por f
Creo entender el problema inicial, pero si esto funciona por que no
hacer ...
------------------------- 8< -------------------------
class Clase:
def __init__(self):
# ...
# self.f = lambda con, msg: self.nuevoMensaje(con, msg)
#
# vvvvvvvvvvvvvvvvv
self.jabber.setMessageHandler( self.nuevoMensaje )
def nuevoMensaje(self, con, msg):
print "He recibido un nuevo mensaje con el texto %s" % msg
------------------------- >8 -------------------------
Recordaba algún caso parecido, pero no se donde, en cualquier caso
probé lo siguiente:
class registre:
def add( self, prg):
self.prg = prg
def exe( self ):
self.prg( 1,2 )
def loop( self ):
import os, time
if os.fork() == 0 :
for i in range(4):
self.exe()
time.sleep(1)
class foo:
def __init__( self, msg ):
self.msg = msg
self.rg = registre()
# Esto debía ser algo parecido a Jabber
self.rg.add( self.handler )
self.rg.loop()
def handler( self, x, y ):
print self.msg, x, y
foo( "Aun vivo" )
Y obtuve lo que se podía esperar:
Aun vivo 1 2
Aun vivo 1 2
Aun vivo 1 2
Aun vivo 1 2
¿Quizá no entendido nada? o ¿Jabber hace algo raro con sus
MessageHandlers?
Un saludo
Más información sobre la lista de distribución Python-es