2017-12-22 20 views
0

まず内部の仕組みを理解しないでください、私は__init__.pyファイル内の変数と関数を持っています他のファイルの各URLのこのパッケージメソッドを呼び出します。は変数はすべての__init__.py

​​

常にuserを印刷しますか?または、crudメソッドとedit.pyファイル内にdbnameを出力すると、異なる値が出力されます。

dbnameがcrudで更新されましたが、edit.pyファイルに新しい値が表示されませんでした。

答えて

0

あなたの説明が本当に混乱しているように私はあなたをよく理解できませんが。

# edit.py 
from xxx import dbname 

print(dbname) 
crud(another_value) 
print(dbname) 

そして、あなたは同じ値を取得見つける:私はあなたがこのようにdbnameを印刷していると思います。それはあなたがfrom xxx import dbnameになると、元のローカルコピーdbnameが得られるからです。 dbnameオリジナルを取得するには、sys.modules["xxx"].dbnameを使用する必要があります。

+0

私のデザインパターンが壊れています。私の質問に従って、変数を '__init __。py'の中に入れ、その値を変更して動作しませんでした。 – TomSawyer

+0

私の質問はもっと明確になるように更新しました。 – TomSawyer

+1

私が言ったように、 '__init __。py'の中の' print(dbname) 'はあなたが望むものを出力しますが、' edit.py'の中の 'print(dbname)'は 'dbname'のローカルコピーを出力します。 〜から。 import * '。なぜ 'user'を出力するのですが、デフォルト値' dbname'を出力しないのだろうか?それは変更されているようですが、1回だけですか?これは 'from 'というときに' edit.py'が実行されるためです。この時点でインポートの編集とローカルコピーが作成されました。 'crud( 'user')'と呼ぶ時間は、 'crud'を初めて呼び出すときです。 '/ group /'に最初にアクセスしようとすると、 'user'の代わりに' group'が常に表示されます。 – Sraw

関連する問題