将python模块拉入包名称空间

noi*_*oio 7 python namespaces

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

package/
    __init__.py
    functions.py      #contains do()
    classes.py        #contains class A()
Run Code Online (Sandbox Code Playgroud)

我希望能够打电话

import package as p
Run Code Online (Sandbox Code Playgroud)

如何让我的内容functions,classes可访问如下:

p.do()
p.A()
Run Code Online (Sandbox Code Playgroud)

代替:

p.functions.do()
p.classes.A()
Run Code Online (Sandbox Code Playgroud)

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

小智 14

可以这样做__init__.py(因为那是你导入的内容import package):

from package.functions import *
from package.classes import *
Run Code Online (Sandbox Code Playgroud)

然而,import *几乎总是一个坏主意,这不是例外.相反,许多软件包显式导入一组有限的常用名称 - 比方说

from package.functions import do
from package.classes import A
Run Code Online (Sandbox Code Playgroud)

这也允许访问doA直接访问,但它几乎不容易发生命名冲突和其他问题import *.