类定义如下:
class IterRegistry(type):
def __iter__(cls):
return iter(cls._registry)
class Example:
__metaclass__ = IterRegistry
_registry =[]
def __init__(self,iD):
self.iD = iD
self.count = 40
self._registry.append(self)
def reduceCount(self):
self.count -= 1
在程序的过程中,创建了越来越多的类实例。我有一个计时器正在运行,然后在所有实例上运行for循环并将每个计数减少1。
def timer():
for i in Example:
i.reduceCount()
if i.count < 0:
#then delete the instance
我的问题是如何删除此实例?
答案 0 :(得分:1)
您可以使用a del
statement。
del也可用于删除整个变量:
>>> del a
以下引用名称是一个错误(至少在为其分配了另一个值之前)。
但是在一天结束时,这只是对垃圾收集器的建议。可以立即删除对象,但也可以在执行此语句后很长时间删除它。它不是由语言规范保证的。
答案 1 :(得分:0)
为了回答我的问题,我跟着@Unholysheep建议并将其从课程中的注册表中删除。为此,我不得不通过将_reigstry更改为注册表来稍微更改代码,因此我可以从程序的其余部分访问它。
class IterRegistry(type):
def __iter__(cls):
return iter(cls.registry)
class Example:
__metaclass__ = IterRegistry
registry =[]
def __init__(self,iD):
self.iD = iD
self.count = 40
self.registry.append(self)
def reduceCount(self):
self.count -= 1
现在允许我通过以下方式从循环内部删除实例:
def timer():
for i in Example:
i.reduceCount()
if i.count < 0:
#then delete the instance
Example.registry.remove(i)