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

Как реализуется контекстный менеджер в Python

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

Пример реализации класса-контекстного менеджера:

python
class FileManager:
    def __init__(self, filename, mode):
        self.filename = filename
        self.mode = mode
        
    def __enter__(self):
        self.file = open(self.filename, self.mode)
        return self.file
        
    def __exit__(self, exc_type, exc_val, exc_tb):
        self.file.close()
        if exc_type:  # Обработка исключений
            print(f"Error occurred: {exc_val}")
        return True  # Подавляем исключение

Использование

with FileManager('test.txt', 'w') as f:
f.write('Hello')

text

Также можно использовать `contextlib.contextmanager` для создания контекстного менеджера через генератор:
```python
from contextlib import contextmanager

@contextmanager
def file_manager(filename, mode):
    try:
        f = open(filename, mode)
        yield f
    finally:
        f.close()

Ключевые особенности:

  • __enter__ выполняется при входе в блок with
  • __exit__ вызывается при выходе, даже при исключении
  • Можно обрабатывать или подавлять исключения в __exit__
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

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

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

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