【问题标题】:python with object simulating multiple with objects [duplicate]python与对象模拟多个对象[重复]
【发布时间】:2020-01-31 15:08:47
【问题描述】:

我想得到这种行为:

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

使用单个对象:

with UnifyingObj():
    print(...)

我想知道如何安全地实现UnifyingObj

这必须是一个类。我试图做这样的事情:

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)

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

【问题讨论】:

  • 您需要以某种方式详细说明您的 多个对象 - 相同的对象,有多少个?
  • 它不是重复的,因为我要求它是单个对象
  • 您是否希望 param=... 始终是静态的 (1,2)
  • 如果可能的话,我可以使用它

标签: python python-3.x with-statement


【解决方案1】:

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

from contextlib import ExitStack


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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-15
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-17
    • 1970-01-01
    相关资源
    最近更新 更多