3

ボタン、トリフェーダー、ポスターなどを含む要素と呼ばれるパッケージがあります。Buttonクラスでは、from elements import *

これは正常に実行され、実行しようとするとprint(poster)、正常に動作し、期待どおりに機能します。しかし、私がそうするときprint(trifader)NameError: name 'trifader' is not defined。トリフェーダーとポスターは同じパッケージに含まれていますが、ポスターは定義されていますが、トリフェーダーは定義されていませんか?なんて変だ。これについて何か説明はありますか?

要素パッケージのディレクトリ構造は次のとおりです。

Elements:
  __init__.py
  trifader.py
  button.py
  poster.py

また、実際には関係のない他のいくつかのもの。

各.pyファイルには、.pyという名前のクラスが含まれています。たとえば、trifader.pyにはTriFaderというクラスがあります。

4

2 に答える 2

2

__init__.pyが定義されていない場合__all__(したがって、を使用してインポートされるものを制限している場合from X import *)、おそらくimportどこかに循環があり、その定義が評価される前にモジュールが参照される原因になっています。

于 2012-11-08T01:11:59.300 に答える
0

循環インポートを確認します。循環インポートは、両方のモジュールが「インポート」形式のインポートを使用する場合に問題ありません。2番目のモジュールが最初のモジュールから名前を取得する必要があり(「モジュールのインポート名から」)、インポートが最上位にある場合、これらは失敗します。これは、最初のモジュールが2番目のモジュールのインポートでビジー状態であるため、1番目の名前がまだ使用できないためです。次に、インポートが呼び出されるまでに関数内でインポートが呼び出された場合、最初のモジュールは初期化を完了し、2番目のモジュールはそのインポートを実行できます。

于 2012-11-08T01:13:07.673 に答える