在Python中如何处理在另一个上下文管理器内创建的上下文管理器?
例如:假设您有一个充当上下文管理器的类A和一个同样充当上下文管理器的类B。但是,类B的实例将必须实例化并使用类A的实例。我已经阅读过PEP 343,并想到了以下解决方案:
例如:假设您有一个充当上下文管理器的类A和一个同样充当上下文管理器的类B。但是,类B的实例将必须实例化并使用类A的实例。我已经阅读过PEP 343,并想到了以下解决方案:
class A(object):
def __enter__(self):
# Acquire some resources here
return self
def __exit__(seplf, exception_type, exception, traceback):
# Release the resources and clean up
pass
class B(object):
def __init__(self):
self.a = A()
def __enter__(self):
# Acquire some resources, but also need to "start" our instance of A
self.a.__enter__()
return self
def __exit__(self, exception_type, exception, traceback):
# Release the resources, and make our instance of A clean up as well
self.a.__exit__(exception_type, exception, traceback)
这是正确的方法吗?或者我是否遗漏了一些需要注意的地方?