2012-01-25 13 views
3

この形式のグローバル変数宣言は、Pythonでは有効ですか?私の辞書にはB.pyのデータがないことがあります。ちょうど矛盾しているようです。Pythonのグローバル変数インポートを使用しますか?

classes.py

class Aclass: 
    dict = {} 

myClass = Aclass() 

A.py:

from classes import myClass 

myClass.dict["variable"] 

B.py:A.pyはB.py.前に処理され

from classes import myClass 

print str(myClass.dict) 

これは私のために空のdict {}を印刷します。

これは前の投稿からの簡単な質問です。Shared/Global Dictionary in Django Between URLs and Context Processorあなたの洞察は高く評価されます。その後、質問が面白いとなり

+2

A.pyは変数で何もしません。辞書のエントリにアクセスするだけです。 'myClass.dict [" variable "] =" value "'(またはそのようなもの)を言うことを意味しましたか? – HardlyKnowEm

+0

問題が少しばかり気になっていたことを皆に知ってもらいたいと願っております。同じファイルを2つのパス、つまりインポートされたproject.classes.myClassを通してインポートしていましたが、もう一方はclasses.myClassだけをインポートして2つの別々のインスタンスを作成していました。これが縮小された記事は次のとおりです:[URLとコンテキストプロセッサの間のDjangoの共有/グローバル辞書](http://stackoverflow.com/questions/9010797/shared-global-dictionary-in-django-between-urlsコンテキストプロセッサ) – garromark

答えて

2

あなたが(コメントで指摘したように)

myClass.dict["variable"]="hello" 

をそれを変更A.pyであれば。

それは問題ありませんが、そのデータに別のインターフェース(関数、メソッド)を持たせることをお勧めします。これは、モジュールの状態を保存する方法です。 myClass(!)を呼び出したオブジェクトは、aとbの両方から同じです。

複数の読み込みは安全で、ロードされた同じモジュールを返す以外は何もしません。

+0

... *(同じプロセスにあるoc)*の前にインポートされたモジュールは 'sys.modules'ディクショナリに保存されるためです。 :) –

関連する問題