如何通过类修改函数内部变量?Python代码运行异常求助
解决Python类方法修改外部函数变量的问题
你遇到的核心问题是:Python中的整数属于不可变类型,当你把var传给myClass.update方法时,实际上传递的是这个整数的副本。在update里给var赋值2,只是修改了方法内部的局部变量,完全不会影响到function里的那个var,所以循环会一直停在var == 1的分支,不断打印1。
下面给你三种可行的解决思路:
方案一:让方法返回修改后的值,在函数里重新赋值
这种方式最直观,通过返回值把修改后的变量传递回去:
def function(): test = myClass() var = 1 running = True while running: if var == 1: print(1) var = test.update(var) # 接收方法返回的新值 if var == 2: print(2) class myClass: def update(self, var): var = 2 return var # 返回修改后的变量
方案二:用可变类型包装变量(比如列表)
可变类型的对象在传递时,传递的是引用。修改可变对象内部的元素,会直接影响到原对象:
def function(): test = myClass() var = [1] # 用列表把整数包起来 running = True while running: if var[0] == 1: print(1) test.update(var) if var[0] == 2: print(2) class myClass: def update(self, var): var[0] = 2 # 修改列表里的元素,原列表会同步变化
方案三:把变量托管给类实例
把var变成myClass实例的属性,这样在update方法里直接修改实例属性,就能同步到函数中:
def function(): test = myClass() test.var = 1 # 将变量绑定到实例上 running = True while running: if test.var == 1: print(1) test.update() if test.var == 2: print(2) class myClass: def update(self): self.var = 2 # 修改实例自身的属性
这三种方案里,方案三更符合面向对象的设计思路,把相关的数据和逻辑封装在类里;方案一和方案二则更灵活,适合简单场景。你可以根据自己的实际需求选择~
内容的提问来源于stack exchange,提问作者PRyan
相关产品推荐
相关产品推荐

