使用__init__从其他文件导入Python函数
我有以下这些文件:
1 ./run.py
2 ./code/util.py
3 ./code/__init__.py
在 util.py 文件里,我有:
def funA():
print 'Hello World !'
在 ./code/init.py 文件里,我有:
__all__=['util'];
from util import *
现在我在当前目录打开了 Python 提示符(其实是 ipython),然后我输入:
from code import *
结果我只得到了 util 模块。
util module <module 'code.util' from 'code/util.pyc'>
我必须包含包的名字才能使用 funA()。我本以为 funA 现在已经在我的命名空间里,可以直接用,而不需要写成 code.funA。但是事实并不是这样,我想知道问题出在哪里。我想我对 __ init __.py 的用法还是有点困惑。
1 个回答
1
__all__
的作用是告诉Python,你希望通过from mymodule import *
这种方式,只能导入你在__all__
里列出的名字。比如,你只指定了'util'
,这就明确告诉你的包,只能使用util
这个东西。如果你把__all__
去掉,那么从util
里导入的所有东西都会在code
里可用,这样如果你执行from code import *
,那么util
里的所有内容也都会被导入。
至于这样做是否合适,那就是另一个问题了。导入*
通常会让人感到困惑。