Код: Выделить всё
class A:
def __init__(self):
self.b = B() # where B is a context manager
- Внедрить B в класс и использовать внешний с заявление
Код: Выделить всё
with B() as b: a = A(b)
- Сделайте A менеджером контекста, реализующим закрытие B:
Код: Выделить всё
with A() as a: ... # A will close B now in its __exit__ method
Полагаю, мне здесь не хватает C++ RAII, который напрямую не подходит для Python. Так как же мне избежать создания контекстных менеджеров практически для всех моих классов, если существует цепочка зависимостей?
Чтобы привести очень конкретный пример использования:
An Агент ML (например, ChatGPT) хочет выполнить код. Итак, у меня может быть класс Agent, который может выполнять код. Это делается с помощью блокнота Jupyter. Таким образом, моей программе нужен работающий сервер ноутбуков Jupyter. В идеале я хотел бы инкапсулировать это в классе агента. Класс агента запускает и останавливает сервер. Сервер здесь реализован как менеджер контекста. Решение, которое я придумал, — сделать Агента теперь еще и менеджером контекста, что мне не нравится. Потому что тогда какой-то класс, использующий Агент, тоже должен стать менеджером контекста... и в итоге вся моя программа станет менеджером контекста.
Подробнее здесь: https://stackoverflow.com/questions/793 ... attributes