如何在该类中删除类的实例?

时间:2018-04-08 21:05:28

标签: python python-3.x

我想知道如何删除类中的实例。我正在尝试del self,但它似乎无法奏效。这是我的代码:

class Thing:

    def __init__(self):
        self.alive = True
        self.age = 0

    def update(self):
        self.age += 1

    def kill(self):
        if self.age >= 10:
            del self

    def all(self):
        self.update()
        self.kill()

things =  []

for i in range(0, 10):
    thing.append(Thing())

while True:
    for thing in things:
        thing.all()

我特意要删除类中的实例。我还将del self替换为self = None,但此声明似乎没有任何效果。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:1)

你不能完全满足你的要求。 Python的del语句并不像那样工作。然而,你可以做的是将你的实例标记为死(你已经有了这个属性!),然后,过滤掉对象列表以删除死对象:

class Thing:
    def __init__(self):
        self.alive = True   # use this attribute!
        self.age = 0

    def update(self):
        self.age += 1

    def kill(self):
        if self.age >= 10:
            self.alive = False  # change it's value here rather than messing around with del

    def all(self):
        self.update()
        self.kill()

things =  []

for i in range(0, 10):
    thing.append(Thing())

while True:
    for thing in things:
        thing.all()    # you had a typo on this line

    things = [thing for thing in things if thing.alive] # filter the list

请注意,即使在所有Thing实例都已死亡之后,此代码末尾的循环也会永远运行而没有输出。您可能希望对其进行修改,以便了解正在进行的操作,甚至更改while循环以检查things中是否有任何对象。使用while things代替while True可能是一种合理的方法!

答案 1 :(得分:-3)

我上次遇到同样的麻烦。我搜索了一些答案,但得到了一个。您可以使用self.__delete__()。这种具有两个下划线的删除方法只能删除一个对象,因此您可以使用!!!