我正在尝试跨类更改全局变量。这是我的代码:
文件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中的文件的全局变量?提前致谢
答案 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