Встречается на собеседованиях • сегодня

В чем разница между контекстным менеджером и деструктором в Python

Контекстный менеджер (with statement) управляет ресурсами, гарантируя их освобождение после использования, даже при возникновении исключений. Реализуется через методы __enter__ и __exit__.

Деструктор (__del__) вызывается сборщиком мусора перед удалением объекта, но его вызов не гарантирован и зависит от реализации интерпретатора.

Пример контекстного менеджера:

python
class FileManager:
    def __init__(self, filename):
        self.filename = filename

    def __enter__(self):
        self.file = open(self.filename, 'r')
        return self.file

    def __exit__(self, exc_type, exc_val, exc_tb):
        self.file.close()

with FileManager('file.txt') as f:
    content = f.read()

Деструктор:

python
class TempFile:
    def __del__(self):
        print("Удаление временного файла")

Контекстные менеджеры предпочтительнее для управления ресурсами, так как их поведение детерминировано.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы