[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