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)]]
我想要得到这个行为:
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)]]