如何在Python中设置动态全局变量



假设我已经一个文件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的值时,只需更改文本文件的值

最新更新