python源碼和其他一些書籍,命名各種個性,沒有一個比較統一的命名規范。於是總結了一些,供參考。
模塊名:
模塊應該使用盡可能短的、全小寫命名,可以在模塊命名時使用下划線以增強可讀性。同樣包的命名也應該是這樣的,雖然其並不鼓勵下划線。
主要是考慮模塊名是與文件夾相對應的,因此需要考慮文件系統的一些命名規則的,比如Unix系統對大小寫敏感,而過長的文件名會影響其在Windows\Mac\Dos等系統中的正常使用。
通常是小寫字母,單詞之間用_分割
ad_stats.py
包名:
和模塊名一樣
類名:
幾乎毫無例外的,類名都使用首字母大寫開頭(Pascal命名風格)的規范。使用_單下划線開頭的類名為內部使用,from M import *默認不被導入的情況。
單詞首字母大寫
AdStats
ConfigUtil
全局變量名(類變量,在java中相當於static變量):
大寫字母,單詞之間用_分割
NUMBER
COLOR_WRITE
對於from M import *導入語句,如果想阻止導入模塊內的全局變量可以使用舊有的規范,在全局變量上加一個前導的下划線。
*注意*:應避免使用全局變量
普通變量:
小寫字母,單詞之間用_分割
this_is_a_var
*注意*:
1.不論是類成員變量還是全局變量,均不使用 m 或 g 前綴。
2.私有類成員使用單一下划線前綴標識,多定義公開成員,少定義私有成員。
3.變量名不應帶有類型信息,因為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”做后綴。
縮寫
命名應當盡量使用全拼寫的單詞,縮寫的情況有如下兩種:
1.常用的縮寫,如XML、ID等,在命名時也應只大寫首字母,如XmlParser。
2.命名中含有長單詞,對某個單詞進行縮寫。這時應使用約定成俗的縮寫方式。
例如:
function 縮寫為 fn
text 縮寫為 txt
object 縮寫為 obj
count 縮寫為 cnt
number 縮寫為 num,等。
前導后綴下划線總結
一個前導下划線:表示非公有。
一個后綴下划線:避免關鍵字沖突。
兩個前導下划線:當命名一個類屬性引起名稱沖突時使用。
兩個前導和后綴下划線:“魔術”(有特殊用途)對象或者屬性,例如__init__或者__file__。絕對不要創造這樣的名字,而只是使用它們。
*注意*:關於下划線的使用存在一些爭議。
Python 用下划線作為變量前綴和后綴指定特殊變量。
_xxx 不能用'from module import *'導入(相當於 private)
__xxx__ 系統定義名字
__xxx 類中的私有變量名(相當於protect)
核心風格:避免用下划線作為變量名的開始。
因為下划線對解釋器有特殊的意義,而且是內建標識符所使用的符號,我們建議程序員避免用下划線作為變量名的開始。一般來講,變量名_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 *”,將不導入所有以下划線開頭的對象,包括包、模塊、成員