from contextlib import ExitStack
class A:
def __enter__(self):
print("A enter")
return self
def __exit__(self, t, v, trace):
print("A exit")
class B:
def __enter__(self):
print("B enter")
return self
def __exit__(self, t, v, trace):
print("B exit")
with ExitStack() as stack:
a = stack.enter_context(A()) # 按照进入 stack 的顺序,先入后出的执行 __exit__ 方法
b = stack.enter_context(B())
print(a)
print(b)