Назад к вопросам
Middle
90
questionbank
С помощью каких инструментов можно создать свой собственный контекстный менеджер в Python?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Создать контекстный менеджер можно двумя основными способами:
- Использование классов с методами
__enter__и__exit__. - Использование декоратора
contextmanagerиз модуляcontextlib.
Пример с классом:
class MyContextManager:
def __enter__(self):
# Действия при входе в контекст
print("Вход в контекст")
return self # Можно вернуть объект для использования внутри with
def __exit__(self, exc_type, exc_val, exc_tb):
# Действия при выходе из контекста
# exc_type, exc_val, exc_tb содержат информацию об исключении, если оно возникло
print("Выход из контекста")
# Возвращение True подавляет исключение, False (или ничего) - нет
return False
# Использование
with MyContextManager() as cm:
print("Внутри контекста")
Пример с декоратором contextmanager:
from contextlib import contextmanager
@contextmanager
def my_context_manager_func():
# Действия при входе в контекст (до yield)
print("Вход в контекст")
yield # Возвращает объект для использования внутри with
# Действия при выходе из контекста (после yield)
print("Выход из контекста")
# Использование
with my_context_manager_func() as cm:
print("Внутри контекста")
Выбор между этими способами зависит от сложности логики и предпочтений. Классовый подход более явный и подходит для сложной логики с управлением ресурсами. Декоратор contextmanager удобен для более простых случаев и когда логика может быть выражена в виде генератора.