How should a context manager created inside another context manager be handled in Python?
Example: suppose you have class A
that acts as a context manager, and class B
that also acts as a context manager. But class B
instances will have to instantiate and use an instance of class A
. I've gone through PEP 343 and this is the solution I thought of:
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)
Is this the correct approach? Or am I missing some gotchas?