如何构建应用程序以使全局变量起作用?
我正在寻找最简单的方法来做:
main.py
from Class_A import Class_A
my_var = 3
c_a = Class_A()
print c_a.get_var()
# ==> NameError: global name 'my_var' is not defined
Class_A.py
class Class_A:
def get_var():
global my_var
return my_var
答案:
长崎45的答案很好,以下是如何实现它:
main.py
from Class_A import Class_A
import Global_Vars
c_a = Class_A()
print Global_Vars.my_var
print c_a.get_var()
Global_Vars.my_var += 12
print c_a.get_var()
Class_A.py
import Global_Vars
class Class_A:
def get_var(self):
return Global_Vars.my_var
Global_Vars.py
import random
my_var = random.randint(0,100)
输出:
17
17
29
答案 0 :(得分:2)
如果两个模块依赖于相同的变量,我会将它移到外面的第三个模块,并从那里将它导入到它们。这样做最终会减少循环导入的问题。
在任何情况下,global
关键字都用于设置全局变量。如果您只想获得变量值,请不要使用它。
答案 1 :(得分:2)
如果您希望某些对象被其他对象共享,请将此对象传递给其他对象,即:
shared.py:
import random
class Shared(object):
def __init__(self):
self.var = random.randint(0,100)
lib.py:
class MyClass(object):
def __init__(self, shared):
self.shared = shared
def get_var(self):
return self.shared.var
main.py:
from shared import Shared
import lib
shared = Shared()
obj = lib.MyClass(shared)
print "shared.var : ", shared.var
print "obj.get_var() : ", obj.get_var()
shared.var = 200
print "shared.var : ", shared.var
print "obj.get_var() : ", obj.get_var()
请注意,您不需要任何"全球"变量在这里。
答案 2 :(得分:1)
您必须知道Python变量主要是引用值的标记。 integer
是不可变的。所以,在那之后:
gv.my_var += 12
gv.my_var
引用不同的值(36
)。这只会更改此引用。对24
的其他引用不受影响。