Despistado con weakref y tipos

Hernán Martínez Foffani hernan en orgmf.com.ar
Vie Jun 25 16:39:13 CEST 2004


> Quisiera poder crear referencias débiles a clases. Aunque la
> documentación parece que no incluye a las clases como objetos
> referenciables débilmente, el módulo weakref no da ningún error. Mi
> sospecha es que está tomando las clases como instancias de 'type':
>
> ...
>
> Usando las clases antiguas, directamente da un error al crear la
> referencia, por lo que confirma mis sospechas de que un tipo pesa más
> el que sea clase que el sea instancia de 'type'.

Las nuevas clases son siempre del tipo 'type', son *instancias* de
ese tipo.
[Aunque sospecho que lo sabes y que esa no era la pregunta]

(En python 2.3.4)
Lo normal:
>>> class C(object): pass

>>> c = C()
>>> C                   # <- la clase C
<class '__main__.C'>
>>> c                   # <- instancia de clase C
<__main__.C object at 0x009F5550>
>>>

Con weakref:
>>> import weakref
>>> wC = weakref.ref(C)
>>> wC                  # <- la weakref
<weakref at 00A084E0; to 'type' at 00A4FCD0 (C)>
>>> C1 = wC()
>>> C1                  # <- la clase C por weakref
<class '__main__.C'>
>>> c2 = C1()
>>> c2                  # <- instancia de clase C por weakref.
<__main__.C object at 0x009F5EB0>
>>>

Yo no detecto nada inconsistente... ¿Me pierdo algo?

-H.




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