猿问

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

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

将stock和name设置为0和blank并不会真正删除该对象,并且我不确定如何使用del self。


关于如何删除此对象的任何帮助将不胜枚举。提前致谢


红糖糍粑
浏览 190回答 2
2回答

回首忆惘然

您不能删除其内部的对象。相反,您可以将其设置为,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()

慕码人8056858

del self几乎什么都不做-它只会删除名为self的局部变量。但这不是对实例的最后引用(它仍然存在于您的列表中,甚至可能存在于调用方法中),因此该对象将继续存在。为了有效地删除该对象,请在列表中以及其他可能存储的地方删除其引用。del comics[desired_index]
随时随地看视频慕课网APP

相关分类

Python
我要回答