Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Python: custom, context, manager

Как реализовать собственный контекстный менеджер

Вопрос проверяет умение создавать собственные контекстные менеджеры для управления ресурсами.

Короткий ответ

Собственный контекстный менеджер можно реализовать через класс с методами __enter__ и __exit__. В __enter__ инициализируется ресурс. В __exit__ ресурс освобождается. Также можно использовать декоратор contextlib.contextmanager. Это упрощает код и делает его более читаемым.

Длинный ответ

Python предоставляет два основных способа создания собственных контекстных менеджеров: через класс и через генератор.

1. Реализация через класс

Этот способ подходит для сложной логики и хранения состояния.

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

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

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

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

with FileManager("data.txt") as f:
    f.read()

2. Реализация через contextlib.contextmanager

Определение: contextmanager — это декоратор, который позволяет создавать контекстные менеджеры с помощью генератора.

from contextlib import contextmanager

@contextmanager
def file_manager(filename):
    file = open(filename)
    try:
        yield file
    finally:
        file.close()
  • Код до yield — аналог __enter__

  • Код после yield — аналог __exit__

3. Когда какой способ использовать

Выбор зависит от сложности задачи.

  • Класс — для сложного состояния и логики

  • contextmanager — для простых сценариев

Вывод

Собственные контекстные менеджеры полезны, когда нужно централизованно управлять ресурсами и гарантировать их корректное освобождение.

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    6

Навыки

  • Python

    Python

Ключевые слова

#custom

#context

#manager

Подпишись на Python Developer в телеграм

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.