从外部类访问全局变量

时间:2014-08-28 12:01:01

标签: python oop

如何构建应用程序以使全局变量起作用?

我正在寻找最简单的方法来做:

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

3 个答案:

答案 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的其他引用不受影响。