将python模块拉入包名称空间

时间:2011-01-07 10:54:52

标签: python namespaces

如果我有这样的目录结构:

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

我希望能够致电

import package as p

如何将functionsclasses的内容设为:

p.do()
p.A()

代替:

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

文件中的细分只是为了方便(允许更容易的协作),但我更喜欢将所有内容放在同一名称空间中。

1 个答案:

答案 0 :(得分:14)

可以<{1}} 执行此操作(因为这是您__init__.py时导入的内容):

import package

然而,import * is nearly always a bad idea并不是例外情况之一。相反,许多软件包显式导入了一组有限的常用名称 - 比如说,

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

这也允许直接访问from package.functions import do from package.classes import A do,但它几乎不容易发生名称冲突以及来自A的其他问题。