У меня есть объект с подключением к внутренней базе данных, который активен на протяжении всего срока его службы. В конце работы программы соединение должно быть зафиксировано и закрыто. До сих пор я использовал явный метод close
, но это несколько громоздко, особенно когда в вызывающем коде могут возникать исключения.
Я подумываю использовать метод __del__
для закрытия, но после некоторого чтения в Интернете у меня возникли опасения. Это допустимый образец использования? Могу ли я быть уверен, что внутренние ресурсы будут освобождены в __del__
правильно?
В ходе этого обсуждения возник аналогичный вопрос, но он не нашел удовлетворительного отвечать. Я не хочу иметь явный close
метод, и использование with
не является вариантом, потому что мой объект не используется так же просто, как открытие-воспроизведение-закрытие, но сохраняется как член другого, более крупного объекта, который использует его при работе в графическом интерфейсе.
В C ++ есть прекрасно работающие деструкторы, в которых можно безопасно освобождать ресурсы, поэтому я полагаю, что у Python тоже есть кое-что согласованное. По какой-то причине кажется, что это не так, и многие в сообществе клянутся против __del__
. Какая же тогда альтернатива?