[TOC]
說明
python源碼和其他一些書籍,命名各種個性,沒有一個比較統一的命名規范。于是總結了一些,供參考。
python doc 注釋
參考 官方指南 https://www.python.org/dev/peps/pep-0257/
模塊名
模塊應該使用盡可能短的、全小寫命名,可以在模塊命名時使用下劃線以增強可讀性。同樣包的命名也應該是這樣的,雖然其并不鼓勵下劃線
主要是考慮模塊名是與文件夾相對應的,因此需要考慮文件系統的一些命名規則的,比如Unix系統對大小寫敏感,而過長的文件名會影響其在 Windows\Mac\Dos 等系統中的正常使用。
通常是小寫字母,單詞之間用_分割
ad_stats.py
包名
和模塊名一樣
文件名
全小寫,可使用下劃線
注意:混合大小寫僅被允許用于這種風格已經占據優勢的時候,以便保持向后兼容。
類名
幾乎毫無例外的,類名都使用首字母大寫開頭(Pascal命名風格)的規范。
使用 _
單下劃線開頭的類名為內部使用
from module_name import *
默認不被導入的情況
_InnerClass
單詞首字母大寫
AdStats
ConfigUtil
Pascal命名風格
變量
全局變量名(類變量,在java中相當于static變量)
大寫字母,單詞之間用 _
分割
NUMBER
COLOR_WRITE
對于 from module_name import *
導入語句,如果想阻止導入模塊內的全局變量可以使用舊有的規范,在全局變量上加一個前導的下劃線。
注意:應避免使用全局變量
普通變量
小寫字母,單詞之間用 _
分割
this_is_a_var
注意:
- 不論是類成員變量還是全局變量,均不使用 m 或 g 前綴(匈牙利標記法)。
- 私有類成員使用單一下劃線前綴標識,多定義公開成員,少定義私有成員。
- 變量名不應帶有類型信息,因為Python是動態類型語言。如
iValue、names_list、dict_obj等都是不好的命名。
實例變量:
以 _
開頭,其他和普通變量一樣
_price
_instance_var
私有實例變量(外部訪問會報錯)
以 __
開頭(2個下劃線),其他和普通變量一樣
__private_var
專有變量
__
開頭,__
結尾,一般為python的自有變量,
不要以這種方式命名普通變量,這個是保留字,要滿足防御性編程需求
__doc__
__class__
函數
普通函數
和普通變量一樣
get_name()
count_number()
ad_stat()
私有函數(外部訪問會報錯)
以 __
開頭(2個下劃線),其他和普通函數一樣
__get_name()
函數和方法的參數
總使用“self”作為實例方法的第一個參數。
總使用“cls”作為類方法的第一個參數。
如果一個函數的參數名稱和保留的關鍵字沖突,通常使用一個后綴下劃線好于使用縮寫或奇怪的拼寫
常量
常量名所有字母大寫,由下劃線連接各個單詞如 MAX_OVERFLOW
,TOTAL
異常
因為異常也是一個類,所以遵守類的命名規則
此外,如果異常實際上指代一個錯誤的話,應該使用“Error”做后綴。
縮寫
命名應當盡量使用全拼寫的單詞,縮寫的情況有如下兩種:
- 常用的縮寫,如
XML
、ID
等,在命名時也應只大寫首字母,如XmlParser
- 命名中含有長單詞,對某個單詞進行縮寫。這時應使用約定成俗的縮寫方式
例如:
名稱 | 縮寫 |
---|---|
function | fn |
text | txt |
object | obj |
count | cnt |
number | num |
前導后綴下劃線總結
- 一個前導下劃線:表示非公有。
- 一個后綴下劃線:避免關鍵字沖突。
- 兩個前導下劃線:當命名一個類屬性引起名稱沖突時使用。
- 兩個前導和后綴下劃線:“魔術”(有特殊用途)對象或者屬性,例如init或者file。絕對不要創造這樣的名字,而只是使用它們。
注意:關于下劃線的使用存在一些爭議
Python 用下劃線作為變量前綴和后綴指定特殊變量
# 不能用'from module import *'導入(相當于 private)
_xxx
# 系統定義名字
__xxx__
# 類中的私有變量名(相當于protect)
__xxx
下劃線核心風格
避免用下劃線作為變量名的開始
因為下劃線對解釋器有特殊的意義,而且是內建標識符所使用的符號,我們建議程序員避免用下劃線作為變量名的開始。
一般來講,變量名
_xxx
被看作是“私有的”,在模塊或類外不可以使用。當變量是私有的時候,用_xxx
來表示變量是很好的習慣。
"單下劃線" 開始的成員變量叫做保護變量,意思是只有類對象和子類對象自己能訪問到這些變量;
"雙下劃線" 開始的是私有成員,意思是只有類對象自己能訪問,連子類對象也不能訪問到這個數據
以單下劃線開頭_foo
的代表不能直接訪問的類屬性,需通過類提供的接口進行訪問,不能用“from xxx import *”
而導入;
以雙下劃線開頭的__foo
代表類的私有成員;
以雙下劃線開頭和結尾的__foo__
代表python里特殊方法專用的標識,如__init__()
代表類的構造函數。
特定命名方式
主要是指 __xxx__
形式的系統保留字命名法。
項目中也可以使用這種命名,它的意義在于這種形式的變量是只讀的,這種形式的類成員函數盡量不要重載
如
class Base(object):
def __init__(self, id, parent = None):
self.__id__ = id
self.__parent__ = parent
def __message__(self, msgid):
# …
其中 __id__
、__parent__
和 __message__
都采用了系統保留字命名法
__
雙下劃線開頭雙下劃線結尾__
:指那些包含在用戶無法控制的命名空間中的“魔術”對象或屬性
如類成員的__name__
、__doc__
、__init__
、__import__
、__file__
、等
推薦永遠不要將這樣的命名方式應用于自己的變量或函數。
單下劃線結尾_
:只是為了避免與python關鍵字的命名沖突
_
單下劃線開頭:弱“內部使用”標識,如:from M import *
,將不導入所有以下劃線開頭的對象,包括包、模塊、成員