我想知道如何删除类中的实例。我正在尝试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
,但此声明似乎没有任何效果。我怎样才能做到这一点?
答案 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__()
。这种具有两个下划线的删除方法只能删除一个对象,因此您可以使用!!!