删除tkinter中的类中的实例化对象?

时间:2018-08-14 20:14:46

标签: python python-3.x tkinter instantiation

我正在尝试制作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。

任何有关如何删除该对象的帮助将不胜枚举。 预先感谢

2 个答案:

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