使用__init__从其他文件导入Python函数

-1 投票
1 回答
1889 浏览
提问于 2025-04-18 10:02

我有以下这些文件:

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里的所有内容也都会被导入。

至于这样做是否合适,那就是另一个问题了。导入*通常会让人感到困惑。

撰写回答