python變量名下划線


 

  • xx: 公有變量
  • _x: 單前置下划線,保護變量,私有化屬性或方法,不能用於’from module import *’ 以單下划線開頭的表示的是protected類型的變量。即保護類型只能允許其/類對象本身與子類對象進行訪問。是一個Python命名約定,表示這個名稱是供內部使用的。 它通常不由Python解釋器強制執行,僅僅作為一種對程序員的提示。
  • __xx:雙前置下划線,私有成員,表示的是私有類型的變量。只能是允許這個類本身進行訪問了,連子類也不可以訪問;避免與子類中的屬性命名沖突,無法在外部直接訪問(名字重整所以訪問不到)。Python解釋器自動在這種雙下划線的私有方法或者私有屬性的前面加上了 _類名 ,所以使用原定義的變量名和方法名訪問不了變量和方法, 在規范上,這種雙下划線的私有方法和私有屬性是不應該在外部訪問的; Python保留了有雙前導和雙末尾下划線的名稱,用於特殊用途。 這樣的例子有,__init__對象構造函數,或__call__ --- 它使得一個對象可以被調用,所以盡量不用這種表示方式,以免和python沖突;
  • __xx__:雙前后下划線,特殊方法專用的標識,如 __init__()為代表的類構造函數等。用戶名字空間的魔法對象或屬性。例如:__init__ , __ 不要自己發明這樣的名字
  • xx_:單后置下划線,用於避免與Python關鍵詞的沖突;單個末尾下划線(后綴)是一個約定,用來避免與Python關鍵字產生命名沖突;像class或def這樣的名稱已經被一個關鍵字所占用,附加一個下划線來解決命名沖突;
  • _:某個變量是臨時的或無關緊要的

 

1,在構造函數__init__中是_x,不是x,你直接x是訪問不到的;

python中沒有真正的公有和私有變量,python只是對變量名稱做了一個變化,還是可以在外部訪問到的,是偽私有。注:雖然私有變量可以通過_類名__變量名來訪問,但強烈建議不要這樣做!

2,為什么是_x 而不是x,這是python中的私有變量(雖然python中沒有公有變量和私有變量,也就是說這是偽私有),在python中,如果一個變量不想被外部直接訪問,一般是在變量前加一個下划線,提醒不要直接訪問(其實是可以通過self._x訪問到的,如果不想被訪問還可以使用雙下划線__x,也是不能直接訪問)所以提供get_x這樣的函數供使用者訪問;

3,為什么要使用_x這樣的偽私有變量,因為我們使用property時,讓方法變成屬性的方式來調用,一般是這樣寫x=property(...),這樣調用更加清晰明了;但是如果構造函數中的變量也用x,就會和property中的變量有沖突,所有一般我們寫_x

 

核心風格:避免用下划線作為變量名的開始。
因為下划線對解釋器有特殊的意義,而且是內建標識符所使用的符號,建議避免用下划線作為變量名的開始。

1.變量前置單下划線:

 

模塊ahua有_a這個變量;

 

 使用from ahua import * 導入ahua模塊 發現_a不能被訪問

 

使用import 導入包 可以打印_a

2.變量前雙前置下划線

 

在類的__init__方法下定義一個__a的變量 創建a對象 發現不能打印a.__a

 

使用__dict__方法來查看a實例對象所擁有的屬性 發現init里定義的__a變量變成了_A__a

3.變量前后各雙下划線

屬於類中的魔法方法 會在特定的情況下自動執行 比如

1.__new__方法會在創建實例對象時執行 

2.__init__方法會在創建對象后執行

3.__str__方法會在打印對象時執行

4.變量后單下划線

用來避免與python關鍵詞沖突

總結:

1.變量前單下划線_a 作用:使用from導入模塊時,禁止導入_a變量 解決方案使用import導入

2.變量前雙下划線__a作用:無法在類的外部直接訪問 解決方案可以定義方法return __a 或者通過__dict__方法來查看所有屬性

3.變量前后各雙下划線. 類中的魔法方法 會在特定的情況下自動執行

4.變量后單下划線,用於避免與python關鍵詞的沖突

 

如果是pytorch,numpy等變量名后用下划線,則表示原地的操作(inline操作)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM