python 名稱前的單下劃線

2021-08-20 13:06:26 字數 1462 閱讀 5148

程式設計師使用名稱前的單下劃線,用於指定該名稱屬性為「私有」。這有點類似於慣例,為了使其他人(或你自己)使用這些**時將會知道以「_」開頭的名稱只供內部使用。正如python文件中所述:

以下劃線「_」為字首的名稱(如_spam)應該被視為api中非公開的部分(不管是函式、方法還是資料成員)。此時,應該將它們看作是一種實現細節,在修改它們時無需對外部通知。

正如上面所說,這確實類似一種慣例,因為它對直譯器來說確實有一定的意義,如果你寫了**「from 《模組/包名》 import 」,那麼以「_」開頭的名稱都不會被匯入

名稱(具體為乙個方法名)前雙下劃線(__)的用法並不是一種慣例,對直譯器來說它有特定的意義。python中的這種用法是為了避免與子類定義的名稱衝突。python文件指出,「__spam」這種形式(至少兩個前導下劃線,最多乙個後續下劃線)的任何識別符號將會被「_classname__spam」這種形式原文取代,在這裡「classname」是去掉前導下劃線的當前類名。例如下面的例子:

>>> class a(object): 

... def _internal_use(self):

... pass

... def __method_name(self):

... pass

...

>>> dir(a()) #method_name前面加上了類名a

['_a__method_name', ..., '_internal_use']

如果你建立a的乙個子類b,那麼你將不能輕易地覆寫a中的方法「__method_name」

>>> class b(a): 

... def __method_name(self):

... pass

...

>>> dir(b())

['_a__method_name', '_b__method_name', ..., '_internal_use']

這種用法表示python中特殊的方法名。其實,這只是一種慣例,對python系統來說,這將確保不會與使用者自定義的名稱衝突。通常,你將會覆寫這些方法,並在裡面實現你所需要的功能,以便python呼叫它們。例如,當定義乙個類時,你經常會覆寫「__init__」方法。

雖然你也可以編寫自己的特殊方法名,但不要這樣做。

>>> class c(object): 

... def __mine__(self):

... pass

...

>>> dir(c)

... [..., '__mine__', ...]

參考:

Python單下劃線和雙下劃線

python 用下劃線作為變數字首和字尾指定特殊變數。不能用 from moduleimport 匯入 系統定義名字 類中的私有變數名 核心風格 避免用下劃線作為變數名的開始。因為下劃線對直譯器有特殊的意義,而且是內建識別符號所使用的符號,我們建議程式設計師避免用下 劃線作為變數名的開始。一般來講,...

python的單下劃線和雙下劃線

python 類中的單下劃線開頭的變數表示 該方法為類的私有方法,原則上外部不能訪問,但是用.xx是可以訪問到的 雙下劃線開頭則是強制外部不能直接訪問的用.xx是訪問不到的,它內部其實是將變數名重新命名為 類名 變數名,所以可以通過.類名 變數名訪問 coding utf 8 author linh...

Python 單下劃線和雙下劃線解析

單下劃線 單下劃線開始的成員變數叫做保護變數,意思是只有類物件和子類物件自己能訪問到這些變數 雙下劃線 開始的是私有成員,意思是只有類物件自己能訪問,連子類物件也不能訪問到這個資料。如下列所示 以單下劃線開頭 foo 的代表不能直接訪問的類屬性,需通過類提供的介面進行訪問,不能用 from impo...