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

use*_*861 7 python oop class 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
Run Code Online (Sandbox Code Playgroud)

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

Old*_*nda 6

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

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()
Run Code Online (Sandbox Code Playgroud)

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

PS:注意功能中的参数。


Jos*_*ino 0

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

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

  • 这个答案需要详细阐述。 (6认同)
  • 只是想知道......为什么“全局变量”是糟糕的解决方案?例如 - 我现在正在处理代码,其中将有很多变量(大约 20 个),这些变量必须在很多函数 && 类 && 方法中使用。那么 - 为什么它不好 - 只是将它们设置为全局变量?那么 - 那么解决方案是什么:使用类 iheritanace (一些带有 `__init__` 的父 `Main` 类,它将为所有“子”类 && 方法设置默认 var?这是解决方案吗? PS 在我的情况下 - 所有 var 都将是 `const `,我的意思是 - 他们将在脚本启动时进行设置,直到完成才更改。 (4认同)