Wann zerstören welche Klasse? Ich sagte du Modul?
Ihr Modul lebt bis der Interpreter stoppt. Sie können etwas hinzufügen zu dieser Zeit das „atexit“ Modul auszuführen:
import atexit
atexit.register(myfunction)
EDIT: Basierend auf Ihre Kommentare.
Da Sie es nicht als Destruktor wollen, ist meine Antwort oben korrekt. def einfach eine andere Funktion (oder statische Methode, wenn Sie möchten), und registrieren Sie es mit dem atexit:
def close_database():
proceed_to_close()
import atexit
atexit.register(close_database)
eine kurze Notiz von Ihrer Definition Jetzt.
Sie sagten, dass die Klasse keine Instanzen hat. Warum also eine Klasse machen? Warum definieren Sie nicht stattdessen die Funktionen auf der Modulebene? Module sind erstklassige Objekte, zwischengespeichert und nur einmal ...
Beispiel importiert, statt definieren database.py
:
class DataBase(object):
@staticmethod
def execute_some_query(query):
code_here()
some_code()
@staticmethod
def close_database():
proceed_to_close()
import atexit ; atexit.register(DataBase.close_database)
und mit:
from database import DataBase
DataBase.execute_some_query(query)
du auf database.py
stattdessen tun könnte :
def execute_some_query(query):
code_here()
some_code()
def close_database():
proceed_to_close()
import atexit ; atexit.register(close_database)
Und verwenden Sie es wie th ist:
import database
database.execute_some_query(query)
Oder noch besser: Mit sqlalchemy und vermeiden diese alle Probleme der eigenen Datenbank-Schnittstelle zu schaffen.
Was meinen Sie mit "Modullöschung"? Wann denkst du, dass das passiert? –
Wir haben eine einfache Klasse, die nur statische Elementfunktionen hat und die Datenbankverbindung beim Entladen des Moduls bereinigen muss. Hatte ich gehofft, dass es eine Methode __del__ entweder für Module oder Klassen geben würde, die keine Instanzen haben? – Dan
@Dan: Bitte aktualisieren Sie die Frage mit neuen Informationen; Kommentiere deine eigene Frage nicht. Was ist der Anwendungsfall für das Entladen eines Moduls? Wieso würdest du das machen? –