Приходилось ли писать собственные контекстные менеджеры
Python
Middle
Без компании
Приходилось ли писать собственные контекстные менеджеры
Ответы
Да, приходилось. В Python контекстные менеджеры реализуются через протокол `__enter__` и `__exit__` или с помощью декоратора `@contextmanager` из модуля `contextlib`. Они полезны для управления ресурсами (файлы, соединения) и выполнения setup/teardown операций.
Пример с классом:
```
class DatabaseConnection:
def __enter__(self):
self.conn = connect_to_db()
return self.conn
def __exit__(self, exc_type, exc_val, exc_tb):
self.conn.close()
if exc_type is not None:
print(f"Error occurred: {exc_val}")
```
Пример с `@contextmanager`:
```
from contextlib import contextmanager
@contextmanager
def temp_file(path):
try:
f = open(path, 'w')
yield f
finally:
f.close()
```
Контекстные менеджеры гарантируют освобождение ресурсов даже при возникновении исключений.