请问大佬为什么重写del后调用时还会删除变量?
我重写了__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 本帖最后由 suchocolate 于 2020-12-29 16:57 编辑
"并非de x就相当于自动调用x.__del__(), __del__()方法是当垃圾回收机制回收这个对象的时候调用的"---出自小甲鱼的书
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
四四四四四秒 发表于 2020-12-29 20:46
那请问为什么这里的最后一行还要补上del self.new_file?用户输入del 文件名的时候,不是就已经把它删除 ...
感觉你有点把自己绕进去了,你把 def __del__(self):转换一下概念, 举例成,当某某挂了时候还想做什么?类似于遗言之类的,都写在这里面。 并且,调用__del__这个方法的的对象一般是“时间(回收系统)”,当然你也可以想不开的去del(“自杀”) z5560636 发表于 2020-12-30 08:43
感觉你有点把自己绕进去了,你把 def __del__(self):转换一下概念, 举例成,当某某挂了时候还想做什么 ...
所以也就是说,那最后一行的del self.new_file是可有可无的吗? 四四四四四秒 发表于 2020-12-30 14:21
所以也就是说,那最后一行的del self.new_file是可有可无的吗?
是的,“人(对象)”都“挂了(回收)”,“手(属性)”还能“动(用)”吗? z5560636 发表于 2020-12-30 16:31
是的,“人(对象)”都“挂了(回收)”,“手(属性)”还能“动(用)”吗?
十分感谢解答!那请问大佬,这样回收之后,如果那行del self.new_file还在的话,程序为什么不会报错?del一个不存在的变量,应该是会报错的吧?
页:
[1]