fork download
  1. import contextlib
  2.  
  3. class Guard:
  4. def __init__(self, name):
  5. self.name = name
  6.  
  7. def __enter__(self):
  8. print('enter', self.name)
  9. return self
  10.  
  11. def __exit__(self, *exc):
  12. print('exit', self.name)
  13.  
  14. class Foo(contextlib.ExitStack):
  15. def __init__(self, name):
  16. self.name = name
  17. super().__init__()
  18. super().__enter__()
  19. self.g = self.enter_context(Guard(self.name))
  20.  
  21. with Foo('y') as y:
  22. pass
  23.  
  24. z = Foo('z')
  25. z.close()
  26.  
Success #stdin #stdout 0.04s 9328KB
stdin
Standard input is empty
stdout
enter y
exit y
enter z
exit z