python - Weakref y__slots__
weak-references (2)
Sin una variable
__weakref__para cada instancia, las clases que definen__slots__no admiten referencias débiles a sus instancias. Si se necesita un soporte de referencia débil, entonces agregue__weakref__a la secuencia de cadenas en la declaración__slots__.
De la documentación de Python .
Si agrega __weakref__ a __slots__ , su código funcionará:
>>> from weakref import ref
>>>
>>> class Klass(object):
>>> __slots__ = [''foo'', ''__weakref__'']
>>> def __init__(self):
>>> self.foo = ''bar''
>>> k = Klass()
>>> k
=> <__main__.Klass object at ...>
>>> r = ref(k)
>>> r
=> <weakref at ...; to ''Klass'' at ...>
Considere el siguiente código:
from weakref import ref
class Klass(object):
# __slots__ = [''foo'']
def __init__(self):
self.foo = ''bar''
k = Klass()
r = ref(k)
funciona, pero cuando __slots__ el comentario de __slots__ se rompe con TypeError: "cannot create weak reference to ''Klass'' object" en Python 2.6.
Por favor, ¿alguien sabe si esto es una limitación inherente de Python y __slots__ o si es un error? ¿Cómo evitarlo?
__weakref__ agregar __weakref__ a la lista de ranuras. Es una de las peculiaridades de __slots__ . Antes de la versión 2.3, incluso esto no funcionaba, pero afortunadamente su versión no es tan antigua.