假设我有一个文件a.py
,a
有一个变量var
。
在文件b.py
中,我导入了a.py
并设置了a.var = "hello"
。
然后我在a.py
中导入c.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模块。但是,如果需要在每个服务器请求中读取文件,是不是有点太多了?
答案 0 :(得分:2)
作为初步,即使来自另一个模块,第二个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
>>>
所以你看到导入b时var
的变化实际上是在c。
我怀疑你的问题在于你的代码是否以及以何种顺序实际执行。
答案 1 :(得分: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
答案 2 :(得分:0)
好吧,我会使用文本文件在那里设置值,
a.py :
with open("values.txt") as f:
var = f.read()#you can set certain bytes for read
因此,每当您导入它时,它都会根据文本文件中的值将新值初始化为var
,并且每当您想要更改var
的值时,只需更改值{}文本文件