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