Python命名规范

Python命名规范

命名约定

  1. 所谓“内部(Internal)”表示仅模块内可用或,者在类内是保护或私有的。
  2. 用单下划线(_)开头表示模块变量或函数是protected的(使用import * from时不会包含)。
  3. 用双下划线(__)开头的实例变量或方法表示类内私有。
  4. 将相关的类和顶级函数放在同一个模块里。
  5. 对类名使用大写字母开头的单词(如CapWords, 即Pascal风格),模块名应该用小写加下划线的方式(如lower_with_under.py)。尽管已经有很多现存的模块使用类似于CapWords.py这样的命名,但现在已经不鼓励这样做,因为如果模块名碰巧和类名一致,这会让人困扰。

Python之父Guido推荐的规范:

Type Public Internal
Modules lower_with_under _lower_with_under
Packages lower_with_under
Classes CapWords _CapWords
Exceptions CapWords
Functions lower_with_under() _lower_with_under()
Global/Class Constants CAPS_WITH_UNDER _CAPS_WITH_UNDER
Global/Class Variables lower_with_under _lower_with_under
Instance Variables lower_with_under _lower_with_under (protected) or __lower_with_under (private)
Method Names lower_with_under() _lower_with_under() (protected) or __lower_with_under() (private)
Function/Method Parameters lower_with_under
Local Variables lower_with_under

文件名 全小写,可使用下划线

简短、小写的名字。如果下划线可以改善可读性可以加入。如mypackage

模块 与包的规范同。如mymodule

总是使用单词首字母大写。如MyClass。内部类可以使用前导下划线。

函数&方法 函数名应该为小写,可以用下划线增加可读性。如:myfunctionmy_example_function注意:混合大小写仅被允许用于这种风格已经占据优势的时候,以便保持向后兼容。

函数和方法的参数 总使用“self”作为实例方法的第一个参数。总使用“cls”作为类方法的第一个参数。 如果一个函数的参数名称和保留的关键字冲突,通常使用一个后缀下划线好于使用缩写或奇怪的拼写。

全局变量 对于from M import *导入语句,如果想阻止导入模块内的全局变量可以使用旧有的规范,在全局变量上加一个前导的下划线。 注意:应避免使用全局变量

变量 变量名全部小写,由下划线连接各个单词。如color = WHITEthis_is_a_variable = 1注意:

  1. 不论是类成员变量还是全局变量,均不使用 m 或 g 前缀。(member,global)
  2. 私有类成员使用单一下划线前缀标识,多定义公开成员,少定义私有成员。
  3. 变量名不应带有类型信息,因为Python是动态类型语言。如 iValuenames_listdict_obj 等都是不好的命名。

常量 常量名所有字母大写,由下划线连接各个单词如MAX_OVERFLOWTOTAL

异常Error作为后缀。

缩写 命名应当尽量全拼写,缩写的情况有如下两种:

  1. 常用的缩写,如XMLID等,在命名时也应只大写首字母,如XmlParser
  2. 对某个长单词进行缩写。这时应使用约定成俗的缩写方式。

例如: function 缩写为 fn text 缩写为 txt object 缩写为 obj count 缩写为 cnt number 缩写为 num,等。

前导后缀下划线 一个前导下划线:表示非公有。 一个后缀下划线:避免关键字冲突。 两个前导下划线:当命名一个类属性引起名称冲突时使用。 两个前导和后缀下划线:magic对象或者属性,例如__init__或者__file__注意:关于下划线的使用存在一些争议。

特定命名方式 主要是指__xxx__形式的系统保留字命名法。项目中也可以使用这种命名,它的意义在于这种形式的变量是只读的,这种形式的类成员函数尽量不要重载。如

1
2
3
4
5
6
class Base(object):
def __init__(self, id, parent = None):
self.__id__ = id
self.__parent__ = parent
def __message__(self, msgid):
\# …略

其中 idparentmessage 都采用了系统保留字命名法。


参考:

https://www.cnblogs.com/rtdd/articles/7337992.html

拓展:

http://www.imooc.com/article/19184?block_id=tuijian_wz#child_5_1

https://blog.csdn.net/xun527/article/details/76180493