Возможно ли получить доступ к окружающему контекстному менеджеру?
Существуют три способа использования оператора with:
Используйте существующий контекстный менеджер:
with manager:
pass
Создайте менеджер контекста и свяжите его результат с переменной:
with Manager() as result:
pass
Создайте менеджер контекста и отмените его возвращаемое значение:
with Manager():
pass
Если у нас есть место функцииget_manager()
внутри трех с блоками выше, есть ли реализация, которая может вернуть управляющий контекст, или, по крайней мере, их__exit__
функционировать?
Это очевидно легко в первом случае, но я не могу придумать, как заставить это работать в двух других. Я сомневаюсь, что возможно получить весь менеджер контекста, так как стек значений появляется сразу послеSETUP_WITH
опкод. Тем не менее, так как__exit__
функция хранится в стеке блоковSETUP_WITH
Есть ли способ получить к нему доступ?