2013-07-17 49 views
2

我對python有一個基本的瞭解,但是我讀過的某處當我們使用下面的語法導入模塊時,它不會導入在指定模塊中定義的屬性, _(單下劃線)。任何人都可以告訴我這是怎麼發生的,爲什麼它是這樣的?from import語句丟棄屬性以_(下劃線)開頭

from module.submodule import * 

回答

6

這是通過設計。以下劃線開頭的變量僅被視爲內部使用(不同於其他語言的私人使用)。它們仍然可以直接在模塊上訪問,但是它們不會導入*導入。

documentation*進口:

這樣可以導入所有除了那些以下劃線(_)開始。在大多數情況下,Python程序員不會使用這個工具,因爲它會向解釋器中引入一組未知的名稱,可能會隱藏您已經定義的一些東西。

這也是爲了告訴你,它不鼓勵使用* import,更好地顯式導入你需要的東西。 設計爲的模塊除外,這些模塊通過* import使用,這意味着它們具有__all__屬性(包含模塊想要導出的所有內容的名稱)。

+2

+1用於阻止使用*導入。 –

+0

只是想知道:是__(雙下劃線)預編譯的模塊變量如同等級的類變量一樣嗎? – astrognocci

+1

@astrognocci:是的。以__開頭的屬性(雙下劃線)與類名稱一樣,如(_classname__attributename)。但AFAIK它不適用於被稱爲魔術方法的屬性。 (以__開頭和結尾(雙下劃線))。 –