Eci*_*ana 18 python weak-references
请考虑以下代码:
from weakref import ref
class Klass(object):
# __slots__ = ['foo']
def __init__(self):
self.foo = 'bar'
k = Klass()
r = ref(k)
Run Code Online (Sandbox Code Playgroud)
它可以工作,但当我取消注释__slots__它TypeError: "cannot create weak reference to 'Klass' object"在Python 2.6下打破.
请问,有没有人知道这是否是Python的固有限制,__slots__或者它是否是一个错误?如何解决它?
Sam*_*pen 23
如果没有
__weakref__每个实例的变量,则定义的类__slots__不支持对其实例的弱引用.如果需要弱引用支持,则__weakref__在__slots__声明中添加字符串序列.
从Python文档.
如果您添加__weakref__到__slots__您的代码将工作:
>>> 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 ...>
Run Code Online (Sandbox Code Playgroud)