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