Python 的類的底線命名有什麼不同?

來源:互聯網
上載者:User
1,以一個底線開頭的命名 ,如_getFile
2,以兩個底線開頭的命名 ,如__filename
3,以兩個底線開頭和結尾的命名,如 __init__()
4,其它
這些命名有什麼不同嗎?

回複內容:

首先是單底線開頭,這個被常用於模組中,在一個模組中以單底線開頭的變數和函數被預設當作內建函式,如果使用 from a_module import * 匯入時,這部分變數和函數不會被匯入。不過值得注意的是,如果使用 import a_module 這樣匯入模組,仍然可以用 a_module._some_var 這樣的形式訪問到這樣的對象。

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

雙底線開頭的命名形式在 Python 的類成員中使用表示名字改編 (Name Mangling),即如果有一 Test 類裡有一成員 __x,那麼 dir(Test) 時會看到 _Test__x 而非 __x。這是為了避免該成員的名稱與子類中的名稱衝突。但要注意這要求該名稱末尾沒有底線。

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

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

更多關於命名的內容可以參考 PEP 8 《代碼風格指南》的 Name Conventions 一節:http://www.python.org/dev/peps/pep-0008/

需要說明的是,由於這份文檔看起來經過多次修改,雙底線開頭的用法似乎曾經如 @makestory 所說,建議為類的私人成員,至少啄木鳥社區的 PEP 8 譯文是這樣寫的,但 PEP 8 當前的官方版本中並沒有體現。

啄木鳥的譯文參考:http://wiki.woodpecker.org.cn/moin/PythonCodingRule
另找到一份較新的譯文參考:http://code.google.com/p/zhong-wiki/wiki/PEP8 參考我翻譯的一篇譯文:
Python中的底線(譯文) [sorry 之前的回答有個失誤,私人方法應該是雙底線,已更正]
這不是類的命名吧?應該是類方法的。
兩個底線開頭的,是一個私人方法命名,但是python的私人方法並不是一個真正的私人方法,因為它還是能夠被外部存取的,只不過是不能被簡單的直接調用了。
以兩個底線開頭和結尾的命名,都是一些特殊的方法,成為一些操作符或某些行為的鉤子(比如 加減乘除、初始化、迭代等)。

單底線的我不知道,但是有個常見用法是 _() 用於做 i18n 。比如 _('hello') = > '你好' pyton2.7中,模組中的單底線和雙底線開頭的成員都是私人成員,不能用from module import *訪問,但是可以用import module訪問
  • object.__format__()這裡邊的底線是什麼意思的呢

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.