Можно ли в один класс добавить и синхронные (__enter__, __exit__) и асинхронные (__aenter__, __aexit__) методы контекстного менеджера?

Да, класс может реализовать оба протокола. with вызывает __enter__/__exit__, а async with — __aenter__/__aexit__; Python выбирает их по синтаксису использования.

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

Что ответить на собеседовании

Да, класс может реализовать оба протокола. with вызывает enter/exit, а async with — aenter/aexit; Python выбирает их по синтаксису использования.

Подробный разбор

Ответ с пояснениями

Да, класс может реализовать оба протокола. with вызывает enter/exit, а async with — aenter/aexit; Python выбирает их по синтаксису использования.

Асинхронные методы должны возвращать awaitable, обычно они объявлены через async def. Синхронный вход не становится асинхронным автоматически и не должен блокировать работающий event loop длительным I/O. Оба режима могут разделять общую логику, но правила владения ресурсом и повторного входа нужно определить явно. Это удобно для библиотеки с синхронным и асинхронным клиентами при наличии соответствующих реализаций.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее