Как менеджер контекста, созданный в другом диспетчере контекстов, должен обрабатываться в Python?
Пример: предположим, что у вас есть класс 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)
Это правильный подход? Или мне не хватает каких-то ошибок?