Python类方法初始化的全局变量被多函数修改失效问题求解
问题根因
原代码运行不符合预期的核心原因是:A.method()内的x = 0没有做全局声明,这个x是method方法的局部变量,和funcA、funcB中通过global x引用的全局作用域x完全无关。全局作用域下的x从未被初始化,原代码运行时会直接抛出NameError: name 'x' is not defined错误。
修改方法
只需要在method方法内给x赋值前,同样添加global x声明,将method内的x绑定到全局作用域即可,修改后的完整代码如下:
def funcA(): global x print(x) x = 2 a = funcB() return x def funcB(): global x print(x) x = 4 return 2 class A(): def method(): global x x = 0 return funcA() # 执行验证 result = A.method() print(result)
执行效果
运行上述代码的输出完全匹配预期:
- funcA首先读取全局x的初始值0,打印
0 - funcA将全局x赋值为2后调用funcB
- funcB读取当前全局x的值2,打印
2 - funcB将全局x赋值为4后返回
- funcA最终返回全局x的当前值4,最终打印返回结果
4
内容的提问来源于stack exchange,提问作者Jason
相关产品推荐
相关产品推荐

