1、 _xx 以單下劃線開頭的表示的是protected型別的變數。即保護型別只能允許其本身與子類進行訪問。若內部變數標示,如: 當使用「from a_module import」時,不會將以乙個下劃線開頭的物件引入 。不過值得注意的是,如果使用 import a_module 這樣匯入模組,仍然可以用 a_module._some_var 這樣的形式訪問到這樣的物件。
2、 __xx 雙下劃線的表示的是私有型別的變數。不能在類地外部被使用或直接訪問。在類內部的方法中使用時 self.__private_attrs。舉例:如果 test 類裡有一成員 __x,那麼 dir(test) 時會看到 _test__x 而非 __x。這是為了避免該成員的名稱與子類中的名稱衝突。
3、 __xx__定義的是特列方法。使用者控制的命名空間內的變數或是屬性。如類成員的 __init__、__del__、__add__、__getitem__ 等,以及全域性的 __file__、__name__ 等。 python 官方推薦永遠不要將這樣的命名方式應用於自己的變數或函式,而是按照文件說明來使用。
在這裡強調說一下私有變數,python預設的成員函式和成員變數都是公開的,沒有像其他類似語言的public、private等關鍵字修飾。但是可以在變數前面加上兩個下劃線"_",這樣的話函式或變數就變成私有的。這是python的私有變數軋壓(private name mangling) 。當變數被標記為私有後,在變數的前端插入類名,再類名前新增乙個下劃線"_",即形成了_classname__變數名。
類定義
class pub():
_name = 'protected型別的變數'
__info = '私有型別的變數'
def _func(self):
print("這是乙個protected型別的方法")
def __func2(self):
print('這是乙個私有型別的方法')
def get(self):
return(self.__info)
protected型別變數、方法的使用>>> a = pub()
>>> print(a._name)
protected型別的變數
>>> a._func()
這是乙個protected型別的方法
私有型別變數、方法的使用
私有型別的變數和方法 在類的例項中獲取和呼叫不到
>>> print(a.__info)
traceback (most recent call last):
file "", line 1, in attributeerror: 'pub' object has no attribute '__info'
>>> a.__func2()
traceback (most recent call last):
file "", line 1, in attributeerror: 'pub' object has no attribute '__func2'
如果想要在例項中獲取到類的私有類形變數可以通過在類中宣告普通方法,返回私有類形變數的方式獲取
>>> a.get()
'私有型別的變數'
在私有變數的前端插入類名訪問
>>> print(a._pub__info)
私有型別的變數
python命名之下劃線
1 單前導下劃線 var 單個下劃線是乙個python命名約定,表示這個名稱是供內部使用的。它通常不由python直譯器強制執行,僅僅作為一種對程式設計師的提示。2 單末尾下劃線var 有時候,乙個變數的最合適的名稱已經被乙個關鍵字所占用。因此,像class或def這樣的名稱不能用作python中的...
Python下劃線命名模式
圖案例 含義單領先下劃線 var 指示名稱的命名約定供內部使用。通常不由python直譯器強制執行 萬用字元匯入除外 僅作為程式設計師的提示。單尾拖尾下劃線 var 按慣例使用以避免與python關鍵字命名衝突。雙重領先下劃線 var 在類上下文中使用時觸發名稱修改。由python直譯器強制執行。雙...
Python單下劃線和雙下劃線
python 用下劃線作為變數字首和字尾指定特殊變數。不能用 from moduleimport 匯入 系統定義名字 類中的私有變數名 核心風格 避免用下劃線作為變數名的開始。因為下劃線對直譯器有特殊的意義,而且是內建識別符號所使用的符號,我們建議程式設計師避免用下 劃線作為變數名的開始。一般來講,...