Ho una classe che apre un file per la scrittura. Nel mio distruttore, che io chiamo la funzione che chiude il file:del MyClass non chiama oggetto .__ del __()
class MyClass:
def __del__(self):
self.close()
def close(self):
if self.__fileHandle__ is not None:
self.__fileHandle__.close()
ma quando elimino l'oggetto con codice come:
myobj = MyClass()
myobj.open()
del myobj
se provo a reinstanziare l'oggetto, ottengo un errore di valore :
ValueError: The file 'filename' is already opened. Please close it before reopening in write mode.
mentre se chiamo myobj.close()
prima del myobj
non capisco questo problema. Quindi, perché non viene chiamato __del__()
?
Provare ad ereditare da 'object' - non farlo è stato considerato obsoleto per circa sei anni. – Marcin
Dovresti mostrare altro codice. Come si può dirti come 'myobj.close()' cambia le cose, senza sapere cosa fa? – ugoren
Ricorda che 'del' non chiama' __del__'. Rimuove solo uno dei riferimenti. In genere è meglio chiudere esplicitamente, possibilmente usando il protocollo di gestione del contesto (istruzione 'with'). – yak