我正在尝试制作GUI,我需要能够删除Comic类(在Comics列表中)内的实例化对象。 我还需要能够从名称列表中删除它。 (漫画名称)
这是我要删除的对象的功能
def delete_comic():
for c in comics:
if c._name == delete_selected_comic.get():
c._delete_comic()
update_label()
这是我的类,函数和实际上删除对象的函数。
class Comic:
def __init__(self, name, stock):
self._name = name
self._stock = stock
comics.append(self)
comic_names.append(name)
def _delete_comic(self):
self._stock = 0
self._name = ""
del self
将股票和名称设置为0并留空实际上并不会删除该对象,而且我不确定如何使用del self。
任何有关如何删除该对象的帮助将不胜枚举。 预先感谢
答案 0 :(得分:1)
您不能删除其内部的对象。相反,您可以将其设置为None
,然后让垃圾收集器将其删除:
def delete_comic():
for i, c in enumerate(comics):
if c._name == delete_selected_comic.get():
comics[i] = None
update_label()
如果您确实要删除此处的对象,则可以执行以下操作:
def delete_comic():
delete_indicies = []
for i, c in enumerate(comics):
if c._name == delete_selected_comic.get():
delete_indicies.append(i)
for i in delete_indicies:
del comics[i]
update_label()
答案 1 :(得分:0)
del self
几乎不执行任何操作-它仅删除名为self的局部变量。但这不是对实例的最后引用(它仍然存在于您的列表中,并且可能还在调用方法中),因此该对象将继续存在。
要有效删除该对象,请在列表中以及其他可能存储的地方删除其引用。
del comics[desired_index]