模仿open file方法的Python@contextmanager方法?

2024-10-02 16:32:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在处理一个Session类,该类应该正常启动或使用with语句启动。我还需要为每个会话共享一些伪全局值:

session1 = Session(a, b ,c)
session2 = Session(x, y, z)
session1.start()
# Using session1 with a global value here

with session2.start():
    # Using session2 with global value copy

# Coming back in session1 with the initial global value

为了管理全局值,我最终使用了Contextual库。(https://pypi.python.org/pypi/Contextual)。你知道吗

为了将start()管理为@contextmanager,我尝试处理Python堆栈。但我知道,依赖于Python版本和解释器,这可能会很棘手。你知道吗

我想做与open()相同的事情,您可以使用两种方式:

f = open('...')
with open('...') as f:
    # Read the file here.

有可能吗?你应该怎么做?你知道吗

谢谢你的建议!你知道吗


Tags: thepypiherevaluesessionwith语句open
1条回答
网友
1楼 · 发布于 2024-10-02 16:32:36

我认为使用@contextmanager是不可能的,但是您可以直接将Session类设置为上下文管理器,如下所示:

class Session:
    # ...
    def __enter__(self):
        return self

    def __exit__(self, exc_type, exc_value, traceback):
        self.close()
    #...

细节是here。文件就是这样做的。对于第三方类,^{}可能也很方便。你知道吗

相关问题 更多 >