在下面的例子中,我想找出导致异常的原因
执行"NameError: global name 'MATRIX' is not defined"
时test.fun1()
。
非常感谢。
class test:
MATRIX = []
@staticmethod
def fun1():
global MATRIX
test.fun2(MATRIX)
@staticmethod
def fun2(MATRIX):
MATRIX.append(2)
test.fun1()
print test.MATRIX
答案 0 :(得分:3)
您的MATRIX
不是全局的,它是一个类属性,请尝试这样:
class test:
MATRIX = []
@classmethod # Note classmethod, not staticmethod
def fun1(cls): # cls will be test here
test.fun2(cls.MATRIX)
@staticmethod
def fun2(MATRIX):
MATRIX.append(2)
test.fun1()
print test.MATRIX
答案 1 :(得分:2)
导致错误"NameError: global name 'MATRIX' is not defined"
,因为代码中没有名为MATRIX的全局变量。
在您的代码中 MATRIX 不是全局变量,而是类属性。全局变量将使用如下:
MATRIX = []
class test:
@staticmethod
def fun1():
test.fun2(MATRIX)
@staticmethod
def fun2(l):
l.append(2)
@staticmethod
def reset():
global MATRIX
MATRIX = []
test.fun1()
print MATRIX
# >>> [2]
test.fun1()
print MATRIX
# >>> [2, 2]
test.reset()
print MATRIX
# >>> []