Python类实例创建顺序追踪 实例ID自增赋值异常问题求解
问题分析
原代码的问题在于id是绑定在类上的共享属性,所有实例访问这个属性时拿到的都是同一个全局值。构造方法里只做了类属性的自增,没有给单个实例保存创建时刻的序号,所以创建完2个实例后,不管访问哪个实例的id,拿到的都是类属性最终的值2,自然不符合预期。
正确实现
核心逻辑是保留类层面的全局计数器,每次创建实例时先给计数器自增,再把当前计数器的值赋值给当前实例的独有属性,这样每个实例都能保存自己的创建序号。
class Something: _counter = 0 def __init__(self): Something._counter += 1 self.id = Something._counter
效果验证
运行测试代码:
something1 = Something() something2 = Something() print(something1.id) # 输出 1 print(something2.id) # 输出 2 print(Something._counter) # 输出 2,即累计创建的实例总数
注意事项
- 类属性
_counter加单下划线前缀是Python约定的私有标识,提示外部代码不要随意修改这个值,否则会导致实例序号错乱 - 计数器自增操作必须针对类属性执行,不要写成
self._counter += 1,否则会给单个实例生成同名的实例属性,覆盖类层面的计数器,导致计数逻辑失效
内容的提问来源于stack exchange,提问作者raxnocafi
相关产品推荐
相关产品推荐

