0

ここに実際のコード全体を投稿してもあまり意味がないので、問題を一般化するために最善を尽くします。関数 (名前を x とします) は、コードの先頭で定義されています。次に、クラス (メソッド z があり、z が最終的に x を呼び出す) が別の .py ファイルからインポートされます。そのクラスのオブジェクトが作成されます。z が呼び出された後、「グローバル名 'x' が定義されていません」というエラーが表示されます。次に、.py ファイルのすべてのコードを 1 つのファイルに貼り付け、その上に def(x) を配置して、何が起こるか見てみようと思いました。もちろん、意図したとおりに動作しました。以前の方法の問題が何であるかがわかりません(私はこれに固執したいと思います)、それは事実上同じではありませんか?

4

1 に答える 1

2

グローバルはモジュールごとにあり、関数は定義されているモジュールでグローバルを検索します。

したがって、Fooという名前のモジュールで定義された、 という名前barの関数へのアクセスが必要なクラスは、spamその関数を独自の名前空間、つまり module で検索しますbar

関数がインポート先のモジュールでグローバルを検索する場合、使用したい関数のすべての依存関係を繰り返しインポートする必要があります。これは実用的ではありません。

于 2013-02-12T17:22:59.817 に答える