wie Python verwaltet Objekt löschen oder Zerstörung
-
28-09-2019 - |
Frage
Jungs, ich bin ziemlich neu in Python und lernen es eine GUI-Anwendung zu bauen (mit wypython). Ich habe eine Frage im Zusammenhang mit dem Objekt Zerstörung in Python. z.B. in MyFrame Ich habe OnNew (ein neues Dokument erstellen) und onOpen (eine Datei öffnen) -Methode.
kurz, sieht es so aus.
def onNew
self.data=DataModel()
self.viewwindow=ViewWindow(self.data)
def onOpen
dlg = wx.FileDialog(self, "Open file", os.getcwd(), "", "*.*", wx.OPEN)
if dlg.ShowModal() == wx.ID_OK:
self.data=DataModel.from_file(...)
self.view=View(self.data)
Nun, ich mag prüfen „wenn der Benutzer öffnen klicken oder wieder neu, nachdem er entweder vor klicken.“
so für die Fensterklassen, konnte ich die self.viewwindow.Destroy()
nennen, die Fenster Destry. was ist mit dem Datenmodell-Objekt? Wenn ich zum ersten Mal neue nennen: self.data=DataModel()
, ruft dann geöffnet und wieder assign self.data=DataModel.from_file(...)
, was ist mit der alten Instanz? Benötige ich es selbst zerstören oder Python wird diese Zerstörung verwalten?
Lösung
Python hat Garbage Collection. Solange Sie auf das alte Objekt hängen alle Verweise haben nicht drum herum gesammelt werden.
Sobald Sie sagen self.data = somethingElse
dann die alte self.data
werden keine Verweise darauf haben (es sei denn, eine andere Aufgabe einen Verweis auf das Objekt der self.data
hatte).