我正在设计基于 python 的 API。目前,我遇到了两个不同要求的问题。一方面,我想提供一种可靠的方式来清理 API 相关的资源。因此,据我所知,最好的方法是使用上下文管理器,例如:
# lib
class Client(object):
def __enter__(self):
return self
def __exit__(self, exc_type, exc_val, tb):
do_cleanup()
def method1(self):
pass
def method2(self):
pass
# api user
import mylib
with mylib.Client() as client:
client.method1()
client.method2()
另一方面,我想提供一种在交互式解释器中无缝使用我的库的方法。with
但是在解释器中使用类似or的复合结构try-except-finally
使得解释器的使用不那么时髦,因为with
-block 被视为单个语句。并且最好对每个单个 api 方法使用单个语句,例如:
# interpreter session
>>> import mylib
>>> client = mylib.Client()
<client object at ...>
>>> client.method1()
True
>>> client.method2()
100
那么,我可以在这里有任何选择吗?绝对有一种方法可以为脚本和解释器提供不同的使用语义,但我想把它作为最后的手段。