gpt4 book ai didi

python - 编写自动关闭类的 Pythonic 方法是什么?

转载 作者:太空狗 更新时间:2023-10-30 00:24:20 26 4
gpt4 key购买 nike

我是 Python 菜鸟,但我写了一个像这样的自动关闭函数..

@contextmanager
def AutoClose(obj):
try:
yield obj
finally:
obj.Close()

我有三个类,它们具有可与此函数一起使用的 Close() 方法。这是最 Pythonic 的解决方案吗?我应该自己在类里面做些什么吗?

最佳答案

大多数 pythonic 解决方案是定义方法 __enter__ and __exit__类中的方法:

class Foo(object):
def __init__(self, filename):
self.filename = filename

def __enter__(self):
self.fd = open(self.filename)

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

并使用:

with Foo('/path/to/file') as foo:
# do something with foo

方法__enter____exit__ 将在进入和离开 block with 时隐式调用。另请注意,__exit__ 允许您捕获在 with block 内引发的异常。

函数 contextlib.closing 通常用于那些没有显式定义方法 __enter____exit__ 的类(但有一个方法 关闭)。如果您定义自己的类,更好的方法是定义这些方法。

关于python - 编写自动关闭类的 Pythonic 方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18180810/

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