假设我已经一个文件a.py
,而a
具有变量var
。
在文件b.py
中,我导入,a.py
并设置a.var = "hello"
。
然后,我在c.py
中导入a.py
,并尝试访问a.var
,但我得到了None
。
如何反映数据的变化?很明显,两个不同的实例正在被调用,但是我该如何更改?
编辑:
我在这里要做的是创建一个构成此构成的配置文件:
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模块。但是,如果阅读表格需要在每个服务器请求中完成文件,这不是太多吗?
作为初步,第二个import
语句,即使是从另一个模块中,如果先前已加载了导入的模块,则在源文件中也不会重新执行代码。取而代之的是,导入已经存在的模块只会使您可以访问该模块的名称空间。
因此,如果您在模块A中动态更改变量,即使是从另一个模块中的代码中,其他模块也应该查看更改的变量。
考虑此测试示例:
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
>>>
因此,您会发现在c。
中实际上看到了var
的更改我会怀疑您的问题在于您的代码是否和按什么顺序执行。
file 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
好吧,我会使用文本文件设置值,
a.py :
with open("values.txt") as f:
var = f.read()#you can set certain bytes for read
因此,每当您导入它时,它将根据文本文件中的值初始化为var
,并且每当您想更改var
的值时,只需更改文本文件的值