3

次のようなディレクトリ構造があります。

scripts/
    __init__.py
    filepaths.py
    Run.py
    domains/
        __init__.py
        topspin.py
        tiles.py
        hanoi.py
        grid.py

私は言いたい:

from scripts import *

filepaths.py にあるものを取得するだけでなく、hanoi.py にあるものも取得します

外側__init__.pyには以下が含まれます:

__all__ = ['filepaths','Run','domains','hanoi']

内部ファイルをそのリストに含める方法がわかりません。hanoi を単独で配置すると、次のエラーが発生します。

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'hanoi'

domain.hanoi を入力すると、次のエラー メッセージが表示されます。

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'domains.hanoi'

私が思いつく最後の合理的な推測は、このエラーメッセージを取得する scripts.domains.hanoi を置くことです:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'scripts.domains.hanoi'

サブディレクトリにあるものをすべてのリストに含めるにはどうすればよいですか?

4

2 に答える 2

2

で、次を追加するscripts/__init__.py前に__all__

from domains import topspin, tiles, hanoi, grid

これにより、これらのモジュールが名前空間に追加され、次のコマンドでインポートできるようになります。

from scripts import *

ノート

石鹸箱として、次のようなことをすることが好ましい

from scripts import topspin, tiles, hanoi, grid, filepaths, Run

以上

from scripts import *

今から 6 か月後、コードの 400 行目を見て、インポート スタイルhanoiを使用した場合、それがどこから来たのか疑問に思うかもしれません。*そこからインポートされたものを明示的に示すことscriptsで、物事がどこから来たのかを思い出させるのに役立ちます. 将来あなたのコードを読もうとしている人は、きっとあなたに感謝するでしょう。

于 2013-06-06T21:25:55.427 に答える
1

最初にそれらを__init__ファイルにインポートします。

ではscripts/__init__.py、少なくともインポートし、domainsインポートscripts/domains/__init__.pyなどでインポートしますhanoi。または、domains.hanoiで直接インポートしscripts/__init__.pyます。

これらをインポートしないと、scripts/__init__.pyモジュールは Nestend パッケージへの参照を持ちません。

于 2013-06-06T21:10:37.043 に答える