鱼C论坛

 找回密码
 立即注册
查看: 1593|回复: 3

[已解决]请问最后的del的作用是什么?

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

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

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

x
题目要求为:写一个 FileObject 类,给文件对象进行包装,从而确认在删除对象时文件能自动关闭?
想问一下各位大佬,为什么在重写__del__的时候还要多加一句del self.new_file?不是已经输入del new_file后,__del__才会被调用吗?那按道理来说调用完__del__后,new_file就应该已经被删除了的才对。

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
最佳答案
2020-12-8 22:23:49
因为默认的del只会删除对象,而没有其他操作
注意看本代码的说明。如果你要处理多个文件
例如:打开——读取——关闭——删除,这么写是很繁琐
用这个类包装好以后,只需要实例化对象——读取——删除就行了
正常的del,只做一件事,删除对象
这个类里面的del(因为重写了,所以默认的del方法被覆盖了也就不存在了)
做的是关闭——删除
你没理解重写默认方法的概念,重写以后就覆盖掉了。。。
例如__add__,默认是相加
你改写成相减以后,默认的相加就被覆盖了,就只执行改写后的相减
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-12-8 19:25:12 | 显示全部楼层
销毁实例化对象,释放其占用的内存空间
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-8 22:23:49 | 显示全部楼层    本楼为最佳答案   
因为默认的del只会删除对象,而没有其他操作
注意看本代码的说明。如果你要处理多个文件
例如:打开——读取——关闭——删除,这么写是很繁琐
用这个类包装好以后,只需要实例化对象——读取——删除就行了
正常的del,只做一件事,删除对象
这个类里面的del(因为重写了,所以默认的del方法被覆盖了也就不存在了)
做的是关闭——删除
你没理解重写默认方法的概念,重写以后就覆盖掉了。。。
例如__add__,默认是相加
你改写成相减以后,默认的相加就被覆盖了,就只执行改写后的相减
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-29 14:53:16 | 显示全部楼层
笨鸟学飞 发表于 2020-12-8 22:23
因为默认的del只会删除对象,而没有其他操作
注意看本代码的说明。如果你要处理多个文件
例如:打开—— ...

谢谢解答!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-17 01:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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