Ho un metodo __del__
in una classe che ho definito, per eliminare alcuni oggetti C++ creati chiamando C++ nuovo in un'interfaccia ctypes. Voglio eliminare questi oggetti quando un'istanza della mia classe viene distrutta. Ho un frammento della classe mostrato qui:Python 3, super .__ del __()
class Graph(QtCore.QObject):
def __init__(self):
super().__init__()
#list of objects created by calls to ctypes to create pointers to C++ objects which are instantiated with C++ new
self.graphs = []
def __del__(self):
print("in delete method")
for graph in self.graphs:
# call the C++ delete to free the storage used by this graph
myctypes.graphDelete(graph)
super().__del__()
Quando un'istanza della mia classe Graph viene eliminato, il metodo __del__
viene chiamato e vedo la mia dichiarazione di stampa e quando ho impostato un punto di interruzione nel metodo distruttore nella Codice C++, come previsto, elimina l'oggetto. Tuttavia, quando il mio metodo __del__
chiama super().__del__()
, ricevo il seguente messaggio di errore:
super().__del__()
AttributeError: 'super' object has no attribute '__del__'
Come faccio a garantire che la classe genitore (QtCore.QObject) viene cancellata se ho definire il mio proprio metodo __del__
nella classe figlia o la volontà la classe genitore deve essere cancellata automaticamente?
Si prega di provare 'super (Graph, self) .__ del __()' e 'QtCore.QObject .__ del __ (self)'. Questo non dovrebbe fare alcuna differenza, ma forse funziona. – kay
Grazie Kay, ho appena provato entrambi e ho ancora l'errore di attributo. – inwhack
@inwhack, credo che il garbage collector farà il suo lavoro, ripulendo istanze/variabili inutilizzate –