在Python中的类之间共享全局变量

时间:2013-11-24 22:20:04

标签: python class oop python-2.7

对于面向对象编程而言,我对python的思考相对较新,而且它对我来说相对较慢。

是否可以在具有多个函数的类之间传递全局变量?我已经在这里以及其他方面广泛阅读了这些内容,但我仍然有点困惑。

我的最终目标是全局定义变量,在一个类的函数中为其赋值,然后在另一个类的函数中使用它。那可能吗?我正在为ArcMap构建一个pythonaddin,它需要每个按钮都有一个类。我想要一个按钮来为变量赋值,然后在脚本中的另一个类中使用该变量。

(在我得到警告之前,我知道首先使用全局变量是一种相对糟糕的形式,我试图学习)

例如,作为一个高度简化的例子:

x = []

class A():

    def func_1(self): 
        #populate the x variable
        global x 
        x = 1


class B():

    def func_2(self):
        global x
        #do stuff with x

这是否可以接受(即使不是pythonic)?

3 个答案:

答案 0 :(得分:5)

是的,它可以工作。这是修改后的代码:

x = []

class A:
    def func_1(self):
        #populate the x variable
        global x 
        x.append(1)
class B:
    def func_2(self):
        global x
        print x

a = A()
a.func_1()
b = B()
b.func_2()

它可以正确打印列表x。如果可能,您应该尽量避免全局变量。您可以使用许多其他方法更安全有效地在类之间传递变量。

PS:注意函数中的参数。

答案 1 :(得分:2)

是的,可能。你的代码几乎是正确的,只是在函数定义中缺少几个括号。除此之外,它有效。

现在,可以接受吗?在99%的情况下,不,不是。在类之间传递变量和共享数据有很多种方法,如果不是最差的,使用全局变量是最糟糕的方法之一。

答案 2 :(得分:2)

更多Pythonic解决方案是让按钮对象(在处理“按下”事件的方法中)设置属性或调用任何对象需要信息的方法。