2

クロスモジュール変数に関連する他の質問があるようですが、それらは私の質問に完全には答えていません。

主に読みやすさと保守性を高めるために、3 つのモジュール + 1 つのメイン アプリケーションに分割したアプリケーションがあります。

これらのモジュールのうち 2 つには、他のモジュールおよび他のモジュール スレッドから変更する必要がある変数を持つスレッドがあります。

メインコードからモジュールの変数を変更できますが、すべてのモジュールを他のすべてのモジュールにインポートしない限り、あるモジュールの変数を別のモジュールから変更できないようです。

a&b が main にインポートされ、モジュール a がモジュール b の変数にアクセスする必要がある以下の例:

main
 module a
   var a
 module b
   var a

main
 a.a = 1
 b.a = 2

module a
 b.a = 3

module b
 a.a = 0

モジュール a をモジュール b にインポートし、モジュール b をモジュール a にインポートせずに、これをメイン プログラムを通じてグローバルに実現できますか?

a と b をメインにインポートしてから、a を b にインポートし、b を a にインポートする必要がある場合、メモリとリソースの使用量/速度などに関してどのような影響がありますか?

@abarnert からの提案を試しました。

#moda
vara = 10

#modb
print(str(vara))

#main
import moda
from moda import vara
import modb

ただし、「name error vara is not defined」が表示されます

4

3 に答える 3

1

別のモジュールからモジュールレベルの変数を変更できるようにしたい場合は、はい、他のモジュールをインポートする必要があります。なぜこれを行う必要があるのか​​ 疑問に思います。おそらく、コードを個別のモジュールではなくクラスに分割する必要があります。

たとえば、両方のモジュールで変更する必要がある変数を別のクラスにカプセル化し、そのクラスの単一のインスタンスを、それを必要とするすべてのクラス (またはモジュールですが、実際にはクラスを使用する必要があります) に渡すことができます。

循環インポートの詳細については、Python での循環 (または循環) インポートを参照してください。

于 2013-11-08T02:13:42.590 に答える
1

モジュール内のコードがクラスとして定義され、メイン プログラムがこれらのクラスのインスタンスを作成する場合、メイン プログラムはあるモジュール クラスのインスタンスを別のモジュール クラスに渡すことができ、そのインスタンスへの変更はすべての場所に反映されます。a または b を相互にインポートする必要はありません。これらは単に相互参照を持っているからです。

于 2013-11-08T02:14:21.610 に答える