将Python模块提升到包命名空间中
如果我有这样的文件夹结构:
package/
__init__.py
functions.py #contains do()
classes.py #contains class A()
我想要能够调用
import package as p
我该如何让functions
和classes
里的内容可以像这样访问:
p.do()
p.A()
而不是:
p.functions.do()
p.classes.A()
把文件分开只是为了方便(让合作更简单),但我更希望所有内容都在同一个命名空间里。
1 个回答
15
你可以在 __init__.py
文件里这样做(因为当你使用 import package
时,就是在导入这个文件):
from package.functions import *
from package.classes import *
不过,import *
几乎总是个坏主意,这并不是个例外。相反,很多包会明确导入一些常用的名字,比如:
from package.functions import do
from package.classes import A
这样也可以直接使用 do
或 A
,但这样做不容易出现名字冲突和其他使用 import *
时可能遇到的问题。