import contextlib
class Guard:
def __init__(self, name):
self.name = name
def __enter__(self):
print('enter', self.name)
return self
def __exit__(self, *exc):
print('exit', self.name)
class Foo(contextlib.ExitStack):
def __init__(self, name):
self.name = name
super().__init__()
super().__enter__()
self.g = self.enter_context(Guard(self.name))
with Foo('y') as y:
pass
z = Foo('z')
z.close()
aW1wb3J0IGNvbnRleHRsaWIKCmNsYXNzIEd1YXJkOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgogICAgICAgIHNlbGYubmFtZSA9IG5hbWUKCiAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgogICAgICAgIHByaW50KCdlbnRlcicsIHNlbGYubmFtZSkKICAgICAgICByZXR1cm4gc2VsZgoKICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqZXhjKToKICAgICAgICBwcmludCgnZXhpdCcsIHNlbGYubmFtZSkKCmNsYXNzIEZvbyhjb250ZXh0bGliLkV4aXRTdGFjayk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6CiAgICAgICAgc2VsZi5uYW1lID0gbmFtZQogICAgICAgIHN1cGVyKCkuX19pbml0X18oKQogICAgICAgIHN1cGVyKCkuX19lbnRlcl9fKCkKICAgICAgICBzZWxmLmcgPSBzZWxmLmVudGVyX2NvbnRleHQoR3VhcmQoc2VsZi5uYW1lKSkKCndpdGggRm9vKCd5JykgYXMgeToKICAgIHBhc3MKCnogPSBGb28oJ3onKQp6LmNsb3NlKCkK