首页 > 解决方案 > 从函数中删除对象作为属性

问题描述

我想使用函数删除一个对象。

class Test():
    def __init__(self, x):
        self.x = x

foo = Test(5)

def delete(obj):
    del obj

delete(foo)
print(foo)

在此代码中,我希望它在最后一个打印语句上给我一个错误,但它正在打印我的对象,这是我不想要的。我希望它被删除。我该怎么做呢?

标签: python-3.xclass

解决方案


我会咬。

del obj删除对objinside的本地可用引用delete

如果您添加对objinside的任何引用,您将看到它delete

def delete(obj):
    del obj
    obj

这会导致UnboundLocalError调用delete.

del obj可以obj从全局命名空间中删除,但您必须使用引用的名称:

def delete(obj_name):
    del globals()[obj_name]

然后

class Test():
    def __init__(self, x):
        self.x = x

foo = Test(5)

def delete(obj_name):
    del globals()[obj_name]

delete('foo')
print(foo)
NameError: name 'foo' is not defined

但是还有另一个你没有解释的目标吗?这本身就是一个想要解决的奇怪问题(即XY问题)。为什么不让 Python 的 GC 处理对象的删除呢?


推荐阅读