При уничтожении какого класса? Я думал, ты сказал модуль?
Ваш модуль живет до тех пор, пока переводчик не остановится. Вы можете добавить что-то для запуска в это время, используя модуль "atexit":
import atexit
atexit.register(myfunction)
РЕДАКТИРОВАТЬ: на основе ваших комментариев.
Поскольку вы не хотите, чтобы он был деструктором, мой ответ выше верен. Просто определите другую функцию (или статический метод, если хотите) и зарегистрируйте ее с помощью atexit:
def close_database():
proceed_to_close()
import atexit
atexit.register(close_database)
Теперь краткая заметка о вашем определении.
Вы сказали, что у класса нет экземпляров. Так зачем делать это классом? Почему бы не определить функции на уровне модуля? модули являются первоклассными объектами, кэшируются и импортируются только один раз ...
Пример, вместо определения 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)
и использование:
from database import DataBase
DataBase.execute_some_query(query)
Вы можете сделать это вместо этого на database.py
:
def execute_some_query(query):
code_here()
some_code()
def close_database():
proceed_to_close()
import atexit ; atexit.register(close_database)
И используйте это так:
import database
database.execute_some_query(query)
Или еще лучше: используйте sqlalchemy и избегайте всех этих проблем при создании собственного интерфейса базы данных.