Despistado con weakref y tipos
Chema Cortés
py en ch3m4.org
Vie Jun 25 15:11:56 CEST 2004
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Estoy intentando hacer algunas pruebas (algo complejas) con las referencias
débiles, pero no me funcionan como esperaba.
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':
>>> import weakref
>>> class C(object):pass
...
>>> p=weakref.ref(C)
>>> p
<weakref at 0x402f6504; to 'type' at 0x81b5f8c (C)>
>>> del C
>>> p
<weakref at 0x402f6504; to 'type' at 0x81b5f8c (C)>
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'.
De la documentación: "Not all objects can be weakly referenced; those objects
which can include class instances, functions written in Python (but not in
C), and methods (both bound and unbound)." Sospecho que el weakref sólo
comprueba que el objeto sea una instancia, sin comprobar el caso particular
de que sea precisamente instancia de 'type'.
Mirando la nueva versión de python 2.4, se amplían el conjunto de objetos que
pueden referenciarse débilmente: "The weakref module now supports a wider
variety of objects including Python functions, class instances, sets,
frozensets, deques, arrays, files, sockets, and regular expression pattern
objects." Me faltaría probar este nuevo módulo a ver si lo han resuelto.
Me temo que aquí termina el experimento. No sé si se ha entendido del todo.
¿Qué opináis? ¿Habría que enviarlo como fallo a los desarrolladores del
python?
Otra duda, ¿qué razones hay para que no se puedan crear referencias débiles a
clases? Creo que en otros lenguajes como C++ sí que es posible
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.2 (GNU/Linux)
iD8DBQFA3CSfHLTQrABk8H0RAj9pAKD+0vK/udsQyyGXBhmxGkSLapCJrACg8eDV
aaG1upwEzOAGKS3d9ueWLqw=
=qtwl
-----END PGP SIGNATURE-----
Más información sobre la lista de distribución Python-es