pythonwith对象模拟多个with对象

python with object simulating multiple with objects

我想要得到这个行为:

with Obj(param=1):
    with Obj(param=2):
        print(...)

使用单个对象:

with UnifyingObj():
    print(...)

我想知道如何安全地实施 UnifyingObj class

这必须是单个 class。我试图做这样的事情:

class _DualWith:
    def __init__(self):
        self._with1 = Obj(param=1)
        self._with2 = Obj(param=2)

    def __enter__(self):
        self._with1.__enter__()
        self._with2.__enter__()

    def __exit__(self, *args, **kwargs):
        self._with2.__exit__(*args, **kwargs)
        self._with1.__exit__(*args, **kwargs)

但我不认为它是完全安全的

您是否需要将该行为包装在单独的 class 中?也许你可以做这样的事情?

from contextlib import ExitStack


with ExitStack as stack:
    objects = [stack.enter_context(obj) for obj in [Obj(param=1), Obj(param=2)]]