1. 程式人生 > >python:類5——Python 的類的下劃線命名有什麽不同?

python:類5——Python 的類的下劃線命名有什麽不同?

以及 mod 導入 類成員 部分 span 子類 內部函數 默認

首先是單下劃線開頭,這個被常用於模塊中,在一個模塊中以單下劃線開頭的變量和函數被默認當作內部函數,如果使用 from a_module import * 導入時,這部分變量和函數不會被導入。不過值得註意的是,如果使用 import a_module 這樣導入模塊,仍然可以用 a_module._some_var 這樣的形式訪問到這樣的對象。

在 Python 的官方推薦的代碼樣式中,還有一種單下劃線結尾的樣式,這在解析時並沒有特別的含義,但通常用於和 Python 關鍵詞區分開來,比如如果我們需要一個變量叫做 class,但 class 是 Python 的關鍵詞,就可以以單下劃線結尾寫作 class_。

雙下劃線開頭的命名形式在 Python 的類成員中使用表示名字改編 (Name Mangling),即如果有一 Test 類裏有一成員 __x,那麽 dir(Test) 時會看到 _Test__x 而非 __x。這是為了避免該成員的名稱與子類中的名稱沖突。但要註意這要求該名稱末尾沒有下劃線。

雙下劃線開頭雙下劃線結尾的是一些 Python 的“魔術”對象,如類成員的 __init__、__del__、__add__、__getitem__ 等,以及全局的 __file__、__name__ 等。 Python 官方推薦永遠不要將這樣的命名方式應用於自己的變量或函數,而是按照文檔說明來使用。

另外單下劃線開頭還有一種一般不會用到的情況在於使用一個 C 編寫的擴展庫有時會用下劃線開頭命名,然後使用一個去掉下劃線的 Python 模塊進行包裝。如 struct 這個模塊實際上是 C 模塊 _struct 的一個 Python 包裝。

python:類5——Python 的類的下劃線命名有什麽不同?