2013-03-21 78 views
0

我寫了兩個模塊m1.py和m2.py,每個模塊使用標準庫中的各種模塊。Python(2.7):如何避免導入的模塊出現在我的模塊中?

例如

#m1.py 
import sys 
#. 
#. 

#m2.py 
import os 
#. 
#. 

什麼 「麻煩事了」 我是,當我導入main.py兩個模塊m1.py和m2.py 我可以使用在sys和os中定義的函數是這樣的:

#main.py 
print m1.sys.version 
print m2.os.listdir() 

這是正常的,還是有一些我應該co在我的代碼中導入模塊時是否意想不到?

回答

1

通常您不需要擔心在命名空間中可訪問的內容。任何人如果對那些不屬於模塊記錄的API的東西進行混淆,他們應該得到任何麻煩。 Python假定程序員是負責任的成年人。

例外情況是,您特別希望允許其他代碼使用否則勸阻的from mymodule import *語法。然後你想限制什麼是公開的,這樣你就不會用你自己的內部東西來混淆你的進口商的名字空間。

這裏是你如何能做到這一點:

  • 名稱以下劃線開頭(如_foo)被認爲是私有的,不會與from mymodule import *進口。這不是「真正的」隱私,因爲任何進行正常導入的人仍然可以通過mymodule._foo訪問它們(但它們可能不應該!)。

  • 如果您希望將要導入的模塊設置爲私人模式,請使用as子句爲其提供上述的「私人」名稱。也就是說,使用import os as _os。或者,您可以創建一個__all__變量,明確列出模塊的公用名稱,而不是混亂地使用下劃線。只有列表中的名稱纔會導入from mymodule import *聲明。請注意,如果您希望子模塊可通過from mypackage import *導入,則包中需要__all__序列。這是因爲Python不能相信文件系統不會混淆包中包含的文件名的大小寫。