对于面向对象编程而言,我对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)?
答案 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解决方案是让按钮对象(在处理“按下”事件的方法中)设置属性或调用任何对象需要信息的方法。