【问题标题】:Naming convention for context-manager classes ("with" blocks)上下文管理器类的命名约定(“with”块)
【发布时间】:2025-12-30 12:50:17
【问题描述】:

对于要在with 块中使用的类或函数,是否存在通用命名约定,例如

with CreateSomeContext() as x:
    ...

?表明类或函数结果应该与with一起使用的东西?

【问题讨论】:

  • AFAIK 没有。到目前为止,我们所拥有的是函数和变量名使用this_is_a_function_or_variable,类(类型)使用ThisIsAClassObject,常量使用FULL_CAPITALS
  • AFAIK 没有,因为with 可以用于许多不同的目的。有些人将context 明确地放在名称中,但是这主要发生在with唯一您想要使用此类的地方。有许多类可以与 with 一起使用,但名称中没有(没有双关语)“上下文”一词:从文件到 warnings.catch_warnings 等。

标签: python naming-conventions contextmanager


【解决方案1】:

the respective PEP 0343 中,提到了两个约定:

示例上下文名称中使用的时态不是 随意的。当名称指代一个过去时(“-ed”) 在 __enter__ 方法中完成并在 __exit__ 方法。当名称指的是要在__exit__ 方法中完成的动作时,使用进行时态(“-ing”)。

【讨论】:

    【解决方案2】:

    没有命名约定(opensocket.create_connectionurllib.request.urlopen 都返回可与with 一起使用的上下文管理器),但上下文管理器将具有__enter____exit__ 方法。

    注意:在open("file", "w")的情况下,返回值(文件对象)是上下文管理器,不是open

    【讨论】: