gpt4 book ai didi

python - 对类的所有成员调用 __exit__

转载 作者:太空狗 更新时间:2023-10-30 02:53:21 24 4
gpt4 key购买 nike

是否有一种 Pythonic 的方式来自动 __exit__ 一个类的所有成员?

class C:
def __init__(self):
self.a = open('foo')
self.b = open('bar')

def __enter__(self):
return self

def __exit__(self, exc_type, exc_value, traceback):
# Is it correct to just forward the parameters here?
self.a.__exit__(self, exc_type, exc_value, traceback)
self.b.__exit__(self, exc_type, exc_value, traceback)

我可以不在 ab 上手动调用 __exit__ 来执行此操作吗?我是否正确地调用了 __exit__

假设我拥有的资源不是示例中的文件,并且没有closedestroy 之类的方法.在 __enter____exit__ 之上实现这样的方法可能是一种好的做法吗?

最佳答案

正如我在评论中提到的:

I think most helpfull here will be : contextlib.ExitStack

您可以在 __init__ 中将此对象创建为您自己的类的成员。然后使用 enter_context(cm) 添加所有依赖的上下文管理器,其中 cm 是 context_manager

def __init__(self):
self.exit_stack = contextlib.ExitStack()
self.exit_stack.__enter__()
self.exit_stack.enter_context(open('foo'))
....

要清除所有依赖的上下文,只需调用 __exit__ 这个堆栈的导出。

或者更好的做法是继承 ExitStack 并在 init 中调用 enter_context

关于python - 对类的所有成员调用 __exit__,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49875720/

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