鱼C论坛

 找回密码
 立即注册
查看: 3291|回复: 6

请问大佬为什么重写del后调用时还会删除变量?

[复制链接]
发表于 2020-12-29 15:11:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我重写了__del__方法,但当我实例化一个对象后,调用del,然后得到的结果却是a已经被删除了,但我已经重写了del,不是应该只打印1而不删除吗?
class Test:
        def __del__(self):
                print(1)

                
>>> a = Test()
>>> del a
1
>>> a
Traceback (most recent call last):
  File "<pyshell#14>", line 1, in <module>
    a
NameError: name 'a' is not defined
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-12-29 16:48:56 | 显示全部楼层
本帖最后由 suchocolate 于 2020-12-29 16:57 编辑

"并非de x就相当于自动调用x.__del__(), __del__()方法是当垃圾回收机制回收这个对象的时候调用的"---出自小甲鱼的书
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-29 20:46:49 | 显示全部楼层
suchocolate 发表于 2020-12-29 16:48
"并非de x就相当于自动调用x.__del__(), __del__()方法是当垃圾回收机制回收这个对象的时候调用的"---出自 ...

那请问为什么这里的最后一行还要补上del self.new_file?用户输入del 文件名的时候,不是就已经把它删除了吗
class FileObject:
    '''给文件对象进行包装从而确认在删除时文件流关闭'''

    def __init__(self, filename='sample.txt'):
        #读写模式打开一个文件
        self.new_file = open(filename, 'r+')

    def __del__(self):
        self.new_file.close()
        del self.new_file
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-30 08:43:40 | 显示全部楼层
四四四四四秒 发表于 2020-12-29 20:46
那请问为什么这里的最后一行还要补上del self.new_file?用户输入del 文件名的时候,不是就已经把它删除 ...

感觉你有点把自己绕进去了,你把 def __del__(self):  转换一下概念, 举例成,当某某挂了时候还想做什么?  类似于遗言之类的,都写在这里面。   并且,调用__del__这个方法的的对象一般是“时间(回收系统)”,当然你也可以想不开的去del(“自杀”)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-30 14:21:15 | 显示全部楼层
z5560636 发表于 2020-12-30 08:43
感觉你有点把自己绕进去了,你把 def __del__(self):  转换一下概念, 举例成,当某某挂了时候还想做什么 ...

所以也就是说,那最后一行的del self.new_file是可有可无的吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-30 16:31:06 | 显示全部楼层
四四四四四秒 发表于 2020-12-30 14:21
所以也就是说,那最后一行的del self.new_file是可有可无的吗?

是的,“人(对象)”都“挂了(回收)”,“手(属性)”还能“动(用)”吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-2 19:27:36 | 显示全部楼层
z5560636 发表于 2020-12-30 16:31
是的,“人(对象)”都“挂了(回收)”,“手(属性)”还能“动(用)”吗?


十分感谢解答!那请问大佬,这样回收之后,如果那行del self.new_file还在的话,程序为什么不会报错?del一个不存在的变量,应该是会报错的吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-16 21:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表