在Python中删除对象的实例

时间:2016-10-23 17:11:44

标签: python python-2.7

类定义如下:

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

我的问题是如何删除此实例?

2 个答案:

答案 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)