Python:数据类的唯一整数?

adm*_*oss 5 python python-dataclasses

我有以下数据类。

@dataclass(frozen=True)
class myDataClass:
    x: float
    y: float
Run Code Online (Sandbox Code Playgroud)

我想要的是,每次创建此类的对象时,它都会被标记一个从 0 开始递增的唯一 id。

所以,第一次我说first = myDataClass(0, 1)那么我应该得到first.id == 0,然后如果我说second = myDataClass(0, 1),我应该得到second.id == 1

Sha*_*ger 5

可以通过使用实例itertools.count()__next__方法作为default_factory字段来生成线程安全的唯一 ID :

from dataclasses import dataclass, field
from itertools import count

@dataclass(frozen=True)
class myDataClass:
    x: float
    y: float
    id: int = field(default_factory=count().__next__, init=False)
Run Code Online (Sandbox Code Playgroud)

它比其他选项更快,不涉及自定义代码,并且至少在 CPython 参考解释器上是线程安全的(用itertools.countC 实现并且不释放 GIL,因此两个实例不可能获得相同的结果id)。