[pyar] weakref.WeakValueDictionary
Facundo Batista
facundobatista en gmail.com
Jue Ene 10 15:32:07 ART 2013
2013/1/10 Alejandro Santos <listas en alejolp.com>:
> 2013/1/10 Andres Riancho <andres.riancho en gmail.com>:
>> Lista,
>>
>> Para solucionar esto se me ocurrio utilizar
>> weakref.WeakValueDictionary; pero se ve que algo estoy haciendo mal,
>> pero QUE? Les dejo una prueba de concepto que demuestra lo que quiero
>> hacer y crashea :(
>>
>
> Estás guardando en el WVD valores que pueden ser reclamados
> inmediatamente por el gc:
O sea, el WeakValueDictionary borra automáticamente una entrada del
diccionario cuando el valor no está referenciado en ningún otro lugar.
Y acordate cuando vos hacés self.handle_url lo que está sucediendo es
que se ejecuta un descriptor que te devuelve el método... o sea, ese
método "no lo tiene nadie".
Lo que podrías hacer es no intentar guardar el método, sino la
función: self.handle_url.__func__
Pero ojo, porque ahí ya se va a llamar a handle_url sin la referencia
al objeto (que es lo que justamente inserta el descriptor).
"""
class poc(object):
def __init__(self, dict_impl):
self.handlers = dict_impl({'URL': self.handle_url.__func__})
print self.handlers.items()
def handle(self, method, obj):
self.handlers[method](obj)
def handle_url(obj):
print obj
"""
Slds.
--
. Facundo
Blog: http://www.taniquetil.com.ar/plog/
PyAr: http://www.python.org/ar/
Twitter: @facundobatista
More information about the pyar
mailing list