Czy można uzyskać dostęp do otaczającego menedżera kontekstu?
Zasadniczo istnieją trzy sposoby użycia instrukcji with:
Użyj istniejącego menedżera kontekstu:
with manager:
pass
Utwórz menedżera kontekstu i połącz jego wynik ze zmienną:
with Manager() as result:
pass
Utwórz menedżera kontekstu i odrzuć jego wartość zwracaną:
with Manager():
pass
Jeśli umieściliśmy funkcjęget_manager()
wewnątrz trzech bloków powyżej znajduje się implementacja, która może zwrócić otaczającego menedżera kontekstu lub przynajmniej ich__exit__
funkcjonować?
W pierwszym przypadku jest to oczywiście łatwe, ale nie mogę wymyślić sposobu na sprawienie, by działało w pozostałych dwóch. Wątpię, czy możliwe jest pobranie całego menedżera kontekstu, ponieważ stos wartości jest wyskakujący natychmiast poSETUP_WITH
opcode. Jednak od czasu__exit__
funkcja jest przechowywana na stosie bloków przezSETUP_WITH
, czy jest jakiś sposób na uzyskanie dostępu?