【发布时间】:2012-02-13 00:58:43
【问题描述】:
我有一个类可以打开一个文件进行写入。在我的析构函数中,我调用了关闭文件的函数:
class MyClass:
def __del__(self):
self.close()
def close(self):
if self.__fileHandle__ is not None:
self.__fileHandle__.close()
但是当我使用如下代码删除对象时:
myobj = MyClass()
myobj.open()
del myobj
如果我尝试重新实例化对象,我会得到一个值错误:
ValueError: The file 'filename' is already opened. Please close it before reopening in write mode.
如果我在del myobj 之前调用myobj.close(),我不会遇到这个问题。那么为什么__del__() 没有被调用呢?
【问题讨论】:
-
尝试从
object继承 - 不这样做已被认为已过时六年。 -
您应该显示更多代码。一个人怎么能告诉你
myobj.close()是如何改变事物的,却不知道它做了什么? -
请记住,
del不会调用__del__。它只是删除了其中一个引用。通常最好显式关闭,可能使用上下文管理器协议(with语句)。 -
@Marcin - 解决了它......作为答案发布?仍然好奇为什么会这样......
标签: python destructor