Quando si distrugge quale classe? Ho detto modulo?
Il modulo rimane in attesa dell'interruttore. è possibile aggiungere qualcosa per l'esecuzione in quel momento con il modulo "atexit":
import atexit
atexit.register(myfunction)
EDIT: In base alle vostre osservazioni.
Poiché non lo si vuole come distruttore, la mia risposta sopra è corretta. Basta def un'altra funzione (o un metodo statico se lo si desidera) e registrarlo con l'atexit:
def close_database():
proceed_to_close()
import atexit
atexit.register(close_database)
Ora una breve nota dalla vostra definizione.
Hai detto che la classe non ha istanze. Allora, perché renderlo un corso? Perché non definire le funzioni nel livello del modulo, invece? I moduli sono oggetti di prima classe, nella cache e importati solo una volta ...
Esempio, invece di definire 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)
e l'utilizzo di:
from database import DataBase
DataBase.execute_some_query(query)
Si potrebbe fare questo invece su database.py
:
def execute_some_query(query):
code_here()
some_code()
def close_database():
proceed_to_close()
import atexit ; atexit.register(close_database)
E usarlo come è:
import database
database.execute_some_query(query)
O meglio ancora: Usa sqlalchemy ed evitare tutti questi problemi di creare il proprio database interface.
Che cosa intendi per "cancellazione del modulo"? Quando pensi che questo accada? –
abbiamo una semplice classe che ha solo funzioni membro statiche e ha bisogno di ripulire la connessione al database quando si scarica il modulo. speravo che ci sarebbe stato un metodo __del__ per i moduli o le classi che non hanno istanze? – Dan
@Dan: aggiorna la domanda con nuove informazioni; non commentare sulla tua stessa domanda. Inoltre, qual è il caso d'uso per lo scarico di un modulo? Perché dovresti farlo? –