2

a.pyファイルがありa、変数があるとしましょうvar

ファイルb.pyで、インポートしa.pyて設定しa.var = "hello"ました。

次に、インポートa.pyc.pyてアクセスしようとしましa.varたが、None.

変更をデータに反映するには?2 つの異なるインスタンスが呼び出されていることは明らかですが、どうすれば変更できますか?

編集:

ここでやろうとしているのは、これを構成する構成ファイルを作成することです。

CONFIG = {
    'client_id': 'XX',
    'client_secret': 'XX',
    'redirect_uri': 'XX'
    }

auth_token = ""

auth_url = ""

access_point = ""

ここで、スクリプト a.py で config.py を使用し、config.access_point = "web" を設定するとします。

そのため、config.py を別のファイルにインポートすると、変更が反映され、"" が返されないようにする必要があります。

編集:

テキストファイルは簡単な方法のようです。ConfigParser モジュールも使用できます。しかし、すべてのサーバー要求でファイルからの読み取りを行う必要がある場合、それは少し多すぎませんか?

4

3 に答える 3

2

予備として、2 番目のimportステートメントは、別のモジュールからのものであっても、以前に読み込まれた場合、インポートされたモジュールのソース ファイル内のコードを再実行しません。代わりに、既存のモジュールをインポートすると、そのモジュールの名前空間にアクセスできるようになります。

したがって、モジュール内の変数を動的に変更すると、別のモジュール内のコードからであっても、他のモジュールは実際には変更された変数を参照する必要があります。

次のテスト例を検討してください。

testa.py:

print "Importing module a"
var = ""

testb.py:

import testa
testa.var = "test"

testc.py:

import testa
print testa.var

Pythonインタープリター(または必要に応じてメインスクリプト)で:

>>> import testb
Importing module a
>>> import testc
test
>>>

したがって、varb をインポートしたときに行われた変更は、実際には c に見られることがわかります。

あなたの問題は、コードが実際に実行されるかどうか、またどのような順序で実行されるかにあると思われます。

于 2012-10-29T10:55:51.423 に答える
1

ファイル a.py でクラスを定義します。

class A:
    class_var = False
    def __init__(self):
        self.object_var = False

次に b.py にこれをインポートし、クラス A のオブジェクトをインスタンス化します。

from a import A
a = A()

これで、a のインスタンスの属性にアクセスできます。

a.object_var = True

そして、クラス A の変数にアクセスできます。

A.class_var = True

あなたが今チェックした場合:

a.class_var
-> True
a.object_var
-> True
another_instance = A()
another_instance.object_var
->False
another_instance.class_var
->True
于 2012-10-29T09:56:40.433 に答える
0

そうですね、テキスト ファイルを使用してそこに値を設定します。

a.py :
with open("values.txt") as f:
  var = f.read()#you can set certain bytes for read 

したがって、インポートするたびvarに、テキストファイルの値に従って新しい値が初期化され、値を変更したいときはいつでもテキストファイルの値をvar変更するだけです

于 2012-10-29T11:43:26.777 に答える