Python的類的下划線命名的區別


 

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

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

        雙下划線開頭的命名形式,在Python的類成員中使用表示名字改變(name mangling),即如果Student類里有一成員_x,那么dir( Student )時會看到_Student__x而不是__x。這是為了避免該成員的名稱與子類中的名稱沖突。但要注意:這要求該名稱末尾沒有下划線。

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

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

 

 

1,_xxx表示的是protected類型的變量,不能用於 from module import *,即保護類型只允許這個類本身與子類進行訪問。

2,__xxx表示的是私有類型的變量,只能允許這個類本身進行訪問,連子類也不能訪問。

3,__xxx__表示特殊變量,如__init__,__del__,__call__

 

 

 
 

作者:知乎用戶
鏈接:https://www.zhihu.com/question/19754941/answer/12860775

 


免責聲明!

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



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