You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 14:27:18