Python中單下劃線和雙下劃線屬性:為什么我能訪問_A卻無法訪問__B?

python 中單下劃線和雙下劃線屬性的訪問機制

python 中,我們經常會看到類屬性名前面帶有下劃線,例如 _A 或 __B。很多人認為這僅僅是代碼風格約定,但實際上,雙下劃線(__)會觸發 Python 的命名修飾機制(Name Mangling),這與單下劃線(_)有著本質的區別。

提問者發現,在定義了 _A 和 __B 兩個屬性后,可以直接訪問 _A,卻無法訪問 __B,并收到錯誤提示。這正是 Python 命名修飾機制的結果。

單下劃線 _A 僅僅是一個命名約定,它表示該屬性是“受保護的”,通常暗示其他開發者避免直接訪問它,但實際上并沒有任何機制阻止直接訪問。 它主要用于提醒開發者,這個屬性是內部使用的,修改可能會導致不可預期的后果。

而雙下劃線 __B 則不同。Python 解釋器會對雙下劃線開頭的屬性名進行轉換,這被稱為命名修飾。 轉換后的屬性名通常是 _類名__屬性名 的形式。 例如,在 A 類中,__B 會被轉換為 _A__B。 雖然你依然可以通過 _A__B 直接訪問該屬性,但這并非推薦的做法,因為它繞過了 Python 的命名約定,破壞了代碼的可讀性和可維護性。

立即學習Python免費學習筆記(深入)”;

因此,我們可以說 Python 的下劃線只是代碼約定,并沒有真正意義上的訪問權限控制機制(如 publicprivateprotected 等)。雙下劃線的命名修飾,更像是對屬性的一種弱保護,主要目的是避免與子類或其他模塊中的屬性發生命名沖突,而不是真正的私有屬性。 它依然可以通過特殊手段訪問,因此下劃線僅僅是約定俗成,用于提高代碼的可讀性和可維護性。

以上就是Python中單下劃線和雙下劃線屬性:

? 版權聲明
THE END
喜歡就支持一下吧
點贊5 分享