Как известно, нет гарантии, что __del__ будет вызван сразу после того, как на объект не останется ссылок. Но иногда нужно, чтобы ресурсы, которые использовал объект, были освобождены немедленно, как только объект не нужен. Как это гарантировать?
Допустим есть код:
def test()
a = Processor('file.txt')
a.process()
test()
test()
В конструкторе Processor открывается файл, закрыт файл должен быть в деструкторе, как только объект больше не нужен, то есть сразу после выхода из функции test(). Если я правильно понимаю, в теории может получиться, что после первого test() деструктор не будет вызван, значит, ко второму test() мы попытаемся открыть не закрытый файл.
Как этого избежать?