问题描述
|
我有一个将所有创建的引用存储在静态列表中的类,如下所示:
class A:
_List = []
def __init__(self):
A._List.append(self)
def __del__(self):
A._List.remove(self)
现在,如果我执行以下操作:
a = A()
del a
a
不会被删除,因为它仍然在列表中被引用。但是如果调用析构函数,则引用将被销毁。是否有办法以某种方式强制python执行__del__
方法,以便可以将其从静态列表中删除?
解决方法
您可以使用
weakref.WeakValueDictionary
(或weakref.WeakKeyDictionary
),它将自动删除不再存在的任何元素:
class A(object):
_instances = weakref.WeakValueDictionary()
_next_id = functools.partial(next,itertools.count())
def __init__(self):
self._instances[self._next_id()] = self
, 使用ѭ7创建弱引用以存储在列表中。当对象不再存在时,使用回调从列表中删除条目。