上下文管理器类(“with”块)的命名约定

13

是否有一般的命名约定用于类或函数,它们旨在用于 with 语句块中?

with CreateSomeContext() as x:
    ...

有什么可以表示一个类或函数的结果需要使用with的信号吗?


据我所知,目前还没有。我们目前使用this_is_a_function_or_variable来表示函数和变量名称,使用ThisIsAClassObject来表示类(类型),使用FULL_CAPITALS来表示常量。 - Peter Varo
2
据我所知,with 可以用于许多不同的目的,因此没有必要将单词 context 明确地放在名称中。但是,在仅使用此类时,这种情况通常发生。有许多可以与 with 一起使用的类,它们的名称中没有 “context” 这个词,例如从文件到 warnings.catch_warnings - Bakuriu
2个回答

5

相应的PEP 0343中,提到了两种惯例:

示例上下文名称中使用的时态并不是任意的。当名称指的是在__enter__方法中完成并在__exit__方法中撤消的操作时,使用过去时态("-ed")。当名称指的是在__exit__方法中要完成的操作时,则使用进行时态("-ing")。


由于标准库甚至没有遵循PEP建议的约定(请参见PEP示例stdout_redirected和stdlib contextlib.redirect_stdout),我认为这个约定并未被广泛接受/采用。 - igortg
@igortg 这可能是一个惯例(或两个),但并不是一项强制性的规定。 - glglgl

3

在IT技术中,没有统一的命名规范。但是上下文管理器通常会包含 __enter____exit__ 方法,可以使用 with 语句来调用 (open, socket.create_connection, urllib.request.urlopen 都返回上下文管理器)。

注意:对于 open("file", "w"),返回值(即文件对象)才是上下文管理器,而不是 open 函数本身。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接