上下文管理器的API

时间:2015-06-01 08:24:46

标签: python api-design contextmanager

我有一个对象(比如FileProxy)看起来像一个文件,但做了一些额外的工作。它初始化为foo = FileProxy("/some/file.txt"),我可以像这样使用它

foo.open()
foo.write("something")
foo.close()

我希望将此工作作为上下文管理器。问题是我是否应该让它像这样工作,其中上下文管理器不仅仅创建对象,而且在退出时实际调用.open方法和.close

with FileProxy("/some/file.txt") as f:
   f.write("something")

或者我应该做点什么

with FileProxy("/some/file.txt").open() as f:
   f.write("something")

与非上下文管理器API更加对称。

我更喜欢前者,但它看起来与Python中常规文件的工作方式不同,我想知道是否有一些我在这里实现的反模式。

0 个答案:

没有答案