在python中跨类更改全局变量

时间:2014-11-11 06:53:00

标签: python global-variables

我正在尝试跨类更改全局变量。这是我的代码:

文件main.py

import class2

class first:
    def changeA(self):
        global a
        print a
        a += 2
        print a

test0 = first()
test1 = class2.second()
test2 = first()
test3 = class2.second()
test0.changeA()
test1.changeA()
test2.changeA()
test3.changeA()

文件class2.py

a = 1

class second:
    def changeA(self):
        global a
        print a
        a += 1
        print a

但它返回一个错误:全局名称' a'没有定义。有没有正确的方法来访问和更改python中的文件的全局变量?提前致谢

2 个答案:

答案 0 :(得分:6)

全局变量不存在于python中。

global语句实际上是一个错误的陈述。这意味着变量是模块的变量。在python中没有像全局命名空间这样的东西。

如果要修改多个模块中的变量,必须将其设置为属性:

import module

module.variable = value

执行简单分配只会创建或修改模块的变量。代码

from module import variable

variable = value

只是隐藏从variable导入的module的值,使用该标识符创建绑定,但module' s variable值将更改。

总结:没有办法完全达到你想要的目标(尽管你想要的是一个不好的做法,你应该尝试使用不同的解决方案。)

答案 1 :(得分:1)

全局变量是邪恶的:避免它们!

使用静态'更好。 (用C ++术语)成员变量,例如:

from class2 import second
class first:
    def changeA(self):
        print second.a
        second.a += 2
        print second.a

class second:
    a = 1
    def changeA(self):
        print second.a
        second.a += 2
        print second.a