Tengo una clase que abre un archivo para escribir. En mi destructor, llamo a la función que cierra el archivo:del MyClass no llama al objeto .__ del __()
class MyClass:
def __del__(self):
self.close()
def close(self):
if self.__fileHandle__ is not None:
self.__fileHandle__.close()
pero cuando se borra el objeto con un código como:
myobj = MyClass()
myobj.open()
del myobj
si trato de reinstantiate el objeto, me sale un error de valor :
ValueError: The file 'filename' is already opened. Please close it before reopening in write mode.
mientras que si llamo myobj.close()
antes del myobj
no entiendo este problema. Entonces, ¿por qué no se llama a __del__()
?
Intente heredar de 'object' - no hacerlo se ha considerado un estilo desactualizado durante unos seis años. – Marcin
Deberías mostrar más código. ¿Cómo se puede decir cómo 'myobj.close()' cambia las cosas, sin saber lo que hace? – ugoren
Tenga en cuenta que 'del' no llama a' __del__'. Simplemente elimina una de las referencias. En general, es mejor cerrar explícitamente, posiblemente utilizando el protocolo del gestor de contexto (instrucción 'with'). – yak