为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 del <object> 不删除它?

为什么 del <object> 不删除它?

当年话下 2021-08-14 21:15:08
下面的代码创建了一个“tee”对象,它将标准输出发送到文件和终端。如果del t在我完成开球后执行以下操作,则不会删除对象并且不会__del__()调用成员(因此开球会继续):t = tee("foo.txt")print("bar")del t但如果我__del__()直接打电话,一切正常:t = tee("foo.txt")print("bar")t.__del__()为什么不del工作?这样做的正确方法是什么?class tee():    def __init__(self, filepath):        self.old_stdout = sys.stdout        self.old_stderr = sys.stderr        self.name = filepath        sys.stdout = self        sys.stderr = self    def write(self, text):        self.old_stdout.write(text)        with open(self.name, 'a',  encoding="utf-8") as f:           f.write(text)    def flush(self):        pass    def __del__(self):        sys.stdout = self.old_stdout        sys.stdout = self.old_stderr
查看完整描述

2 回答

?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

Notedel x不直接调用x.__del__()——前者将 x 的引用计数减一,后者仅在 x 的引用计数达到零时调用。
取自Python 3 文档的数据模型部分。

您已经在构造函数中引用了该类:

sys.stdout = self
sys.stderr = self

引用将保留,因此对象将保持“活动”状态


查看完整回答
反对 回复 2021-08-14
  • 2 回答
  • 0 关注
  • 196 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信