2011-01-07 55 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