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

如何为Python数据类子类实现独立的自增ID

解决Python数据类子类独立自增ID的问题

你遇到的问题根源在于所有子类共享了父类Basic中同一个count实例的迭代器。要让每个子类拥有独立的自增ID序列,只需在__init_subclass__中为每个子类单独初始化专属的计数器字段即可。

修改后的完整代码如下:

from dataclasses import dataclass, field
from itertools import count


@dataclass
class Basic:
    def __init_subclass__(cls, **kwargs):
        super().__init_subclass__(**kwargs)
        # 为每个子类创建独立的自增计数器
        cls.identifier: int = field(default_factory=count().__next__, init=False)

class A(Basic):
    pass


class B(Basic):
    pass

测试验证:

>>> import stack
>>> stack.A()
A(identifier=0)
>>> stack.A()
A(identifier=1)
>>> stack.B()
B(identifier=0)
>>> stack.B()
B(identifier=1)

原理说明

当每个子类(比如A、B)继承Basic时,__init_subclass__会被自动调用。此时我们为当前子类动态添加identifier字段,并且为该字段绑定一个全新的count实例的__next__方法作为默认工厂函数。这样每个子类的计数器都是独立的,不会互相干扰。

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 07:27:19