Python 命名規範、約定

常數

常數(constant)是指宣告後不會變動的「變數」,但是在 Python 中並沒有真正意義上的常數,無法宣告一個不會變的變數,但是為了方便其他人和未來的自己閱讀程式碼,通常會將常數使用特殊的方式命名,全部大寫,單字間使用底線分隔: UPPER_UNDERSCORE

例如:
    
CONSTANT_VALUE = 0
    

類別

類別(Class)會使用大駝峰(CamelCase, 又稱駝峰、帕斯卡 PascalCase)的方式命名, 例如:
    
class MyClass:
    def __init__(self):
        pass
    

函數、變數

都是使用蛇形命名法(snake_case),全部小寫,單字間使用底線區隔:
    
def my_function():
    pass
    
my_class = MyClass()

user_name = '小明'
    

變數中的底線

對 python 來說,變數中的底線有特殊意義,不可以亂用。

假設有一個變數不重要,不會使用到,那麼可以使用一個底線來「丟棄」他。像是下面的程式碼想要印出 10 次隨機的亂數,因為「第幾次」這個變數在這裡是多餘的,我們就可以使用 _ 來略過這個變數的命名:
    
for _ in range(10):
	print(random.random())
    

私有變數

在變數前面加上底線代表私有變數,又有分兩種:

一個底線:

代表這個變數是私有的,限於模組內部使用,但是在 python 中並不會限制外部引用,外部還是有辦法存取
    
_my_value = 123
    

兩個底線:

也是代表是私有變數,但是 python 會將變數名稱改變成 _類別名稱 + 變數名稱 的形式。雖然說是私有,但是外部還是可以存取,主要是為了防止和子類別中的變數名稱衝突。
    
class MyClass:
    def __init__(self):
        self.__user_id = 123
        
        
# print(my_class.__user_id)
# AttributeError: 'MyClass' object has no attribute '__user_id'


print(my_class._MyClass__user_id)
# 123
    

前後雙底線:

代表定義特殊方法,最常見的就是 __init__ 和 __str__ ,平時把類別印出來會顯示記憶體位置,但是可以使用 __str__ 覆寫,自訂輸出格式:
    
class MyClass:
    def __init__(self):
        self.__user_id = 123

    def __str__(self):
        return f"MyClass({{__user_id: {self.__user_id}}})"
        
        

my_class = MyClass()
print(my_class)
# MyClass({__user_id: 123})
    

如果沒有使用 __str__ 則會輸出:
    
<__main__.MyClass object at 0x000001B194ABA700>
    

留言