2

这是我的 Python 模块:

main.py
fib/
    __init__.py
    fib.py
    hello.py

fib.py定义函数fib()hello.py定义函数hello()

main.py

from fib import *
hello()

__init__.py

__all__ = ["fib", "hello"]

我写这段代码只是为了练习。不是为了工作

我运行main.py它打印:

Traceback (most recent call last):
  File "tes.py", line 5, in <module>
    hello()
TypeError: 'module' object is not callable

为什么?我有清单你好__all__

4

4 回答 4

7

您已经hello使用该行导入了模块from fib import *,但您没有引用该hello模块中的函数。

改为这样做:

from fib import *
hello.hello()

或这个:

from fib.hello import *
hello()
于 2012-05-22T16:10:27.653 回答
2

您正在导入模块,而不是方法。你可能需要做hello.hello().

于 2012-05-22T16:10:39.597 回答
2

这是因为您导入了模块但没有在其中发挥作用,您可以尝试:

hello.hello()
于 2012-05-22T16:11:09.450 回答
1

如果您想hello()在使用 only 后访问from fib import *,则应将__init__.py文件替换为:

from hello import hello
from fib import fib

__all__ = ['fib', 'hello']

这会将fibandhello函数导入顶级fib模块。这样,当您调用 时from fib import *,该函数 hello()将位于您的命名空间中,而不是您当前实现 的模块中。 hello

于 2012-05-22T16:35:26.783 回答