Python类方法更新实例空属性值失效问题求解
问题排查
你的代码运行不符合预期有两个核心问题:
- 每次写
addition()都会生成一个全新的、独立的类实例。第一次调用addition().add(4)时,你只是给第一个临时生成的实例的number属性赋了值,这行代码执行完后这个临时实例就被内存回收了;第二次调用addition().add(5)是新建的第二个实例,它的number属性走初始化逻辑默认是None,和之前的临时实例没有任何关联。 else分支里的self.number + 10只是完成了加法计算,没有把计算结果重新赋值给self.number,哪怕是操作同一个实例,这里也不会真正更新属性值。- 额外规范细节:Python中判断值是否为
None的标准写法是is None,不推荐用== None。
解决方法
根据你的实际需求选对应方案即可:
方案1:保存实例复用状态(常规实例属性用法)
如果每个实例需要维护独立的计数状态,只需要提前把创建好的实例存到变量中,后续所有方法调用都针对同一个实例,同时补全属性赋值逻辑即可:
class addition: def __init__(self): self.number = None def add(self, data): if self.number is None: print('no') self.number = data else: print('yes') self.number = self.number + 10 return self.number # 先创建实例并保存 calc_instance = addition() print(calc_instance.add(4)) # 打印no,返回值4 print(calc_instance.add(5)) # 进入方法时self.number为4,打印yes,返回值14
方案2:使用类属性实现全局共享状态
如果你希望不管创建多少个类实例,都共享同一个number值,不需要单独保存实例,就把number定义为类层级的属性,所有实例操作的都是同一个值:
class addition: # 类属性,所有该类的实例共享 number = None def add(self, data): if addition.number is None: print('no') addition.number = data else: print('yes') addition.number = addition.number + 10 return addition.number print(addition().add(4)) # 打印no,返回值4 print(addition().add(5)) # 进入方法时self.number为4,打印yes,返回值14
内容的提问来源于stack exchange,提问作者ARIANA MONDIRI
相关产品推荐
相关产品推荐

