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。
可以通过使用实例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)。
| 归档时间: |
|
| 查看次数: |
1319 次 |
| 最近记录: |