Python: 如何在类中实现一个静态列表以引用所有创建的项并方便删除它们?
我有一个类,它会把所有创建的引用存储在一个静态列表里,像这样:
class A:
_List = []
def __init__(self):
A._List.append(self)
def __del__(self):
A._List.remove(self)
现在如果我这样做:
a = A()
del a
a
并没有被删除,因为它在列表中还有引用。不过,如果调用了析构函数,这个引用就会被销毁。有没有办法强制 Python 执行 __del__
方法,这样它就可以从静态列表中移除?
2 个回答
1
使用 weakref.ref()
来创建弱引用,这样可以把它们存储在列表里。当对象不再存在时,可以用一个回调函数来从列表中删除这些引用。
5
你可以使用 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