2011-01-07 38 views
7

如果我有這樣的目錄結構:拉Python模塊成包的命名空間

package/ 
    __init__.py 
    functions.py  #contains do() 
    classes.py  #contains class A() 

而且我希望能夠調用

import package as p 

如何讓我的functions內容, classes,訪問爲:

p.do() 
p.A() 

在STEA的d:在文件

p.functions.do() 
p.classes.A() 

,細分是隻有在那裏爲了方便(允許協作更容易),但我更願意在同一個命名空間中的所有內容。

回答

13

可以__init__.py做到這一點(因爲那是你輸入什麼,當你import package):

from package.functions import * 
from package.classes import * 

然而,import * is nearly always a bad idea,這是不是一個例外。相反,許多包明確導入一組有限的常用名稱 - 說,

from package.functions import do 
from package.classes import A 

這也允許直接訪問doA,但它並不像易名衝突和來自import *其他問題。

+0

完美,謝謝。我不需要`導入*`,選擇功能正常工作。我不知道這樣做(從B導入B``)將'package`命名空間中的`B`作爲`package.B`。雖然現在很明顯。 – noio 2011-01-07 11:11:28