Wol*_*tan 2 python static destructor list
我有一个类将所有创建的引用存储在一个静态列表中,如下所示:
class A:
_List = []
def __init__(self):
A._List.append(self)
def __del__(self):
A._List.remove(self)
Run Code Online (Sandbox Code Playgroud)
现在,如果我执行以下操作:
a = A()
del a
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
732 次 |
最近记录: |