gpt4 book ai didi

python - 在析构函数中从其类的字典中删除实例吗?

转载 作者:行者123 更新时间:2023-11-30 23:13:41 25 4
gpt4 key购买 nike

我正在尝试创建一个类,将其所有实例保存在字典中:

>>> class X:
def __new__(cls, index):
if index in cls._instances:
return cls._instances[index]
self = object.__new__(cls)
self.index = index
cls._instances[index] = self
return self
def __del__(self):
del type(self)._instances[self.index]
_instances = {}

但是,__del__ 似乎不起作用:

>>> x = X(1)
>>> del x
>>> X._instances
{1: <__main__.X object at 0x00000000035166D8>}
>>>

我做错了什么?

最佳答案

基于 Kirk Strauser 的回答,我想指出,当您 del x 时,类的 _instances 仍然保存另一个x 的引用 - 因此它不能被垃圾收集(并且 __del__ 不会运行。

您可能应该使用weakrefs,而不是执行这种低级魔法。 ,这是专门为此目的而实现的。

WeakValueDictinary特别是,它完全满足您的需求,您可以在 __init__ 上填充它,而不是摆弄 __new____del__

关于python - 在析构函数中从其类的字典中删除实例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29184790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com