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__
方法,以便可以将其从静态列表中删除?     

解决方法

        您可以使用
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创建弱引用以存储在列表中。当对象不再存在时,使用回调从列表中删除条目。