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)?
是的,它可以工作。这是修改后的代码:
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:注意功能中的参数。
对的,这是可能的。您的代码几乎是正确的,只是在函数定义中缺少几个括号。除此之外,它还有效。
现在,这是可以接受的吗?在 99% 的情况下,不,事实并非如此。在类之间传递变量和共享数据的方法有很多种,而使用全局变量即使不是最糟糕的方法,也是最糟糕的方法之一。