代码之家  ›  专栏  ›  技术社区  ›  DNB5brims

python文件名的下划线前缀是什么?

  •  34
  • DNB5brims  · 技术社区  · 14 年前

    在里面 cherryPy 例如,有如下文件:

    • __init__.py
    • _cptools.py

    它们有什么不同?这是什么意思?

    4 回复  |  直到 14 年前
        1
  •  43
  •   Michał Górny    14 年前

    __...__ 表示保留Python 名称 (文件名和其他名称)。你不应该 发明 使用双下划线表示法的您自己的姓名;如果你使用现有的,它们有特殊的功能。

    在这个特定的例子中, __init__.py 定义包的“主”单元;它还导致Python将特定目录视为一个包。这是您呼叫时将使用的单元 import cherryPy (以及 cherryPy 是一个目录)。这在 Modules tutorial 。

    另一个例子是 __eq__ 为类提供相等比较的方法。您可以直接调用这些方法(并且在使用 == 操作员);然而,较新的Python版本可能会定义更多这样的方法,因此您不应该发明自己的方法 __ -名称,因为它们可能会发生冲突。您可以在中找到此类方法的详细列表 Data model 文档。

    _... 通常用作“内部”名称。例如,以开头的模块 _ 不应直接使用;类似地,具有 _ 应该是私人的等等。这只是一个惯例,但你应该尊重它。

        2
  •  19
  •   verdesmarald    14 年前

    这些以及其他命名约定在 Style Guide for Python Code - Descriptive: Naming Styles

    简单地说:

    • __double_leading_and_trailing_underscore__ :存在于用户控制的命名空间中的“magic”对象或属性。例如。 __init__ , __import__ 或 __file__ .永远不要编造这样的名字;仅在有文档的情况下使用它们。
    • _single_leading_underscore :“内部使用”指示灯较弱。例如。 from M import * 不导入名称以下划线开头的对象。
        3
  •  8
  •   javex    14 年前

    __init__.py 是一个特殊的文件,当存在于文件夹中时,会将该文件夹转换为模块。在导入模块时, __初始__.py 被处决。另一个只是命名约定,但我想这意味着你不应该直接导入该文件。

    看看这里: 6.4. Packages 有关如何创建模块的说明。

    一般规则:如果Python中的任何东西都是namend __anything__ 那么它是一种特殊的东西,在使用它之前你应该先阅读一下(例如魔法函数)。

        4
  •  2
  •   DisappointedByUnaccountableMod brnfd    5 年前

    当前选择的答案已经很好地解释了 __init__.py 。

    我相信没有真正的必要 _cptools.py 符号 在文件名中 。这可能是不必要的扩展用法,即应用 Style Guide for Python Code - Descriptive: Naming Styles 以下为:

    • _single_leading_underscore :“内部使用”指示灯较弱。例如。 from M import * 不导入名称以下划线开头的对象。

    如果说有什么不同的话,那么上述《风格指南》实际上是 反对 使用 _single_leading_underscore.py 在文件名中。它的 Package and Module Names section 仅在C/C++中实现模块时提及这种用法。

    总的来说 _单项领先分数 注释通常出现在函数名、方法名和成员变量中,以将它们与其他普通方法区分开来。

    很少需要(如果有的话) _single_leading_underscore.py 关于文件名,因为开发人员没有 刮刀 ,他们不太可能根据文件名抢救文件。它们只遵循包的最高级别的API(从技术上讲,其公开的实体由 __all__ ),因此,所有文件名甚至都不明显,更不用说是是否会使用文件(即模块)的一个因素了。