python-3.x - 从函数中删除对象作为属性
问题描述
我想使用函数删除一个对象。
class Test():
def __init__(self, x):
self.x = x
foo = Test(5)
def delete(obj):
del obj
delete(foo)
print(foo)
在此代码中,我希望它在最后一个打印语句上给我一个错误,但它正在打印我的对象,这是我不想要的。我希望它被删除。我该怎么做呢?
解决方案
我会咬。
del obj
删除对obj
inside的本地可用引用delete
。
如果您添加对obj
inside的任何引用,您将看到它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 处理对象的删除呢?
推荐阅读
- python - 如何使用 python 访问仅托管在服务器上的 Lotus iNotes 邮箱?
- xamarin.forms - 如何在“注销”功能中清除有关我的客户端凭据的所有缓存
- reactjs - 如何在 redux 操作中调用两个 API,其中一个 API 调用取决于另一个 API 调用的返回值?
- excel - 将工作表从 1 个工作簿复制到另一个打开的工作簿
- jquery - 使用 JQuery 获取未来 180 天,但当前获取日期,例如 02/30/XX
- ruby-on-rails - 如何在 Rails 中的不同控制器之间移动数据,同时接收用户输入?
- php - 如何在没有任何插件的情况下在 WordPress single.php 下显示 YouTube 观看次数?
- rest - 在 go 中停止处理 http 请求
- sql-server - 如何与不同的列和空行联合
- linux - 是否可以将 docker 容器内的用户映射到外部用户?