2

假设我有一个文件a.py并且a有一个变量var.

在文件b.py中,我导入a.py并设置了a.var = "hello".

然后我导入a.pyc.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 模块。但是,如果在每个服务器请求中都需要从文件中读取是不是有点过分了?

4

3 回答 3

2

作为初步,第二import条语句,即使来自另一个模块,如果之前已经加载过,也不会为导入的模块重新执行源文件中的代码。相反,导入一个已经存在的模块只会让您访问该模块的命名空间。

因此,如果您动态更改模块 a 中的变量,即使是从另一个模块中的代码,其他模块实际上也应该看到更改的变量。

考虑这个测试示例:

测试.py:

print "Importing module a"
var = ""

测试b.py:

import testa
testa.var = "test"

测试c.py:

import testa
print testa.var

现在在 python 解释器(或主脚本,如果你愿意):

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

所以你看到var在导入 b 时所做的更改实际上是在 c 中看到的。

我怀疑您的问题在于您的代码是否以及以什么顺序实际执行。

于 2012-10-29T10:55:51.423 回答
1

在文件 a.py 中定义一个类:

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

然后在 b.py 中导入 this 并实例化 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 回答