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

时间:2012-08-30 07:46:51

标签: python naming-conventions prefix

例如,在cherryPy中,有以下文件:

  • __init__.py
  • _cptools.py

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

4 个答案:

答案 0 :(得分:23)

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

在这个特定示例中,__init__.py定义了包的“主”单元;它还会导致Python将特定目录视为包。它是您致电import cherryPy时使用的单位(cherryPy是目录)。这在Modules tutorial

中进行了简要说明

另一个例子是__eq__方法,它为类提供相等比较。您可以直接调用这些方法(例如,当您使用==运算符时,可以隐式使用它们);但是,较新的Python版本可能会定义更多此类方法,因此您不应创建自己的__ - 名称,因为它们可能会发生碰撞。您可以在Data model文档中找到这些方法的详细列表。

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

答案 1 :(得分:13)

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

中有详细描述

简言之:

  • __double_leading_and_trailing_underscore__:生活在用户控制的命名空间中的“魔术”对象或属性。例如__init____import____file__。不要发明这样的名字;只能按照文件记录使用它们。
  • _single_leading_underscore:弱“内部使用”指标。例如。 from M import *不会导入名称以下划线开头的对象。

答案 2 :(得分:8)

__init__.py是一个特殊文件,当存在于文件夹中时会将该文件夹转换为模块。导入模块后,__init__.py将被执行。另一个只是一个命名约定,但我猜这会说你不应该直接导入该文件。

在这里查看:6.4. Packages,了解如何创建模块。

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

答案 3 :(得分:0)

当前选择的答案已经为__init__.py的双下划线表示法提供了很好的解释。

我相信文件名中实际上不需要_cptools.py表示法。大概是应用Style Guide for Python Code - Descriptive: Naming Styles中的“单个下划线”规则的不必要的扩展用法:

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

如果有的话,实际上是使用文件名中的_single_leading_underscore.py 反对。当在C / C ++中实现模块时,其Package and Module Names section仅提及这种用法。

通常,在函数名称,方法名称和成员变量中通常会出现_single_leading_underscore表示法,以将它们与其他常规方法区分开。

几乎不需要(如果有的话)在文件名上使用_single_leading_underscore.py,因为开发人员不是报废者,所以他们不太可能根据文件名来保存文件。它们只是遵循程序包的最高级别的API(从技术上来说,其公开实体由__all__定义),因此,所有文件名甚至都不引人注意,更不用说是文件(即模块)是否是一个因素了。将被使用。