我有以下数据类。
@dataclass(frozen=True)
class myDataClass:
x: float
y: float
我想要的是,每次我创建这个类的对象时,它都会被标记一个从 0 开始递增的唯一 id。所以,我第一次说
first = myDataClass(0, 1)
那么我应该有 first.id == 0
,然后如果我说 second = myDataClass(0, 1)
, 我应该得到 second.id == 1
.
最佳答案
可以使用 an itertools.count()
instance's __next__
method 生成线程安全的唯一 ID。如 default_factory
对于该领域:
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)
它比其他选项更快,不涉及自定义代码,并且至少在 CPython 引用解释器上是线程安全的(itertools.count
在 C 中实现并且不释放 GIL,因此两个实例不可能获得相同的结果id
)。
关于Python:数据类的唯一整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66770132/