2012-08-30 88 views

回答

19

__...__表示保留的Python 名稱(包括文件名和其他名稱)。您不應該使用雙下劃線符號發明您自己的名字;如果你使用現有的,他們有特殊的功能。

在此特定示例中,__init__.py定義了包的「主」單位;它也會導致Python將特定目錄視爲一個包。當您撥打import cherryPy(和​​是目錄)時,將使用該單位。這在Modules tutorial中有簡要解釋。

另一個例子是__eq__方法,它提供了一個類的相等比較。您可以直接調用這些方法(例如,當您使用==運算符時,可以隱式使用它們);然而,較新的Python版本可能會定義更多此類方法,因此您不應該創建自己的__名稱,因爲它們可能會發生衝突。您可以在Data model文檔中找到相當詳細的此類方法列表。

_...經常用作「內部」名稱。例如,不應直接使用以_開頭的模塊;同樣,_的方法被認爲是私人的,等等。這只是一個慣例,但你應該尊重它。

+4

你沒有明確禁止發明自己的名字。*不鼓勵*,因爲該語言將來可能會添加更多這樣的名稱,所以命名空間是保留的。使用'__...__'名字作爲自己的項目需要您自擔風險。 –

+2

@MartijnPieters:好的,用'不應該'代替。 –

7

__init__.py是一個特殊的文件,當存在於一個文件夾中時將該文件夾轉換爲模塊。在導入模塊後,__init__.py被執行。另一個只是一個命名約定,但我想這會說你不應該直接導入該文件。

看看這裏:6.4. Packages關於如何創建模塊的解釋。

一般規則:如果Python中的任何內容都是namend __anything__那麼它是很特別的,你應該在使用它之前閱讀它(例如魔術函數)。

11

這些和其它,命名約定中詳細Style Guide for Python Code - Descriptive: Naming Styles

簡言之:

  • __double_leading_and_trailing_underscore__:「魔」的物體或生活在用戶控制的命名空間屬性。例如。 __init____import____file__。不要發明這樣的名字;只有按照記錄使用它們。
  • _single_leading_underscore:弱的「內部使用」指標。例如。 from M import *不導入名稱以下劃線開頭的對象。
相關問題