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