Как в Python гарантировать вызов кода деструктора сразу после того, как экземпляр не нужен?

Как известно, нет гарантии, что __del__ будет вызван сразу после того, как на объект не останется ссылок. Но иногда нужно, чтобы ресурсы, которые использовал объект, были освобождены немедленно, как только объект не нужен. Как это гарантировать?

Допустим есть код:

def test()
    a = Processor('file.txt')
    a.process()

test()
test()


В конструкторе Processor открывается файл, закрыт файл должен быть в деструкторе, как только объект больше не нужен, то есть сразу после выхода из функции test(). Если я правильно понимаю, в теории может получиться, что после первого test() деструктор не будет вызван, значит, ко второму test() мы попытаемся открыть не закрытый файл.

Как этого избежать?
  • Вопрос задан
  • 5020 просмотров
Решения вопроса 1
dizballanze
@dizballanze
Software developer at Yandex
Вам нужно добавить функционал ContextManager для того, чтобы можно было использовать класс при помощи конструкции with. См. PEP 343.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
SolidlSnake
@SolidlSnake
Ваш дружелюбный сосед
А что мешает в конце функции добавить явное закрытие?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы