При разрушении какого класса? Я, хотя вы сказали, что модуль?
Ваш модуль работает до тех пор, пока интерпретатор не остановится. Вы можете добавить что-то, чтобы работать в то время, используя модуль «atexit»:
import atexit
atexit.register(myfunction)
EDIT: на основе ваших комментариев.
Поскольку вы не хотите, чтобы это было деструктором, мой ответ выше правильный. Просто DEF другой функции (или статический метод, если вы хотите) и зарегистрировать его в 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 и избежать всех этих проблем создания своего собственного интерфейса базы данных.
Что вы подразумеваете под "модуляцией"? Когда вы думаете, что это происходит? –
У нас есть простой класс, который имеет только статические функции-члены и нуждается в очистке соединения с базой данных при разгрузке модуля. надеялся, что будет метод __del__ либо для модулей или классов, у которых нет экземпляров? – Dan
@ Dan: обновите вопрос с новой информацией; не комментируйте свой вопрос. Кроме того, какой вариант использования для разгрузки модуля? Зачем вам это делать? –