gpt4 book ai didi

模仿打开文件方法的Python @contextmanager方法?

转载 作者:太空宇宙 更新时间:2023-11-04 03:36:22 25 4
gpt4 key购买 nike

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

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.

这可能吗?你应该怎么做?

感谢您的想法!

最佳答案

我认为使用 @contextmanager 是不可能的,但是您可以像这样直接使您的 Session 类成为上下文管理器:

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

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

详情为here .这就是文件的处理方式。对于第 3 方类(class),contextlib.closing也可能很方便。

关于模仿打开文件方法的Python @contextmanager方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28858302/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com