34_context.py 586 B

12345678910111213141516171819202122232425262728293031323334353637
  1. path = []
  2. class A:
  3. def __init__(self, x):
  4. self.x = x
  5. self.path = []
  6. def __enter__(self):
  7. path.append('enter')
  8. return self.x
  9. def __exit__(self, *args):
  10. path.append('exit')
  11. with A(123):
  12. assert path == ['enter']
  13. assert path == ['enter', 'exit']
  14. path.clear()
  15. with A(123) as a:
  16. assert path == ['enter']
  17. assert a == 123
  18. path.append('in')
  19. assert path == ['enter', 'in', 'exit']
  20. path.clear()
  21. with A(123) as a:
  22. assert path == ['enter']
  23. -> end
  24. path.append('in')
  25. == end ==
  26. assert path == ['enter']