【发布时间】:2018-09-27 06:43:00
【问题描述】:
有没有一种 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)
我可以在不手动调用__exit__ 上的a 和b 的情况下执行此操作吗?我是否正确地调用了__exit__?
假设我拥有的资源不是示例中的files,并且没有像close 或destroy 这样的方法。在__enter__ 和__exit__ 之上实现这样的方法可能是一种好习惯吗?
【问题讨论】:
-
你见过this answer吗?
-
@arsho 是的,我有。
-
我认为这里最有帮助的是:
contextlib.ExitStack -
@Take_Care_ 嘿,这看起来很完美!您能否将您的评论扩展为一个完整的答案,以便我接受?
-
或者在python-3.7中你可以使用contextlib.AsyncExitStack
标签: python python-3.x