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()のみを使用してアクセスしたい場合は、ファイルを次from fib import *のように置き換える必要があります。__init__.py

from hello import hello
from fib import fib

__all__ = ['fib', 'hello']

これにより、fibおよびhello関数が最上位fibモジュールにインポートされます。このように、を呼び出すfrom fib import *と、関数 は現在実装されている モジュールhello()ではなく、名前空間にあります。 hello

于 2012-05-22T16:35:26.783 に答える