Bson ObjectId 在 python 数据类对象中生成相同的值

Bson ObjectId generating same value in python dataclass objects

我正在尝试生成一个 ObjectId,它对于我从数据class 中创建的对象是唯一的。然而,对于我从 class 制作的每个对象,它都会生成相同的 ID。

from dataclasses import dataclass
from bson import ObjectId

@dataclass
class B:
    id: ObjectId=ObjectId()

b =B()
b.id
>>ObjectId('600c9d09c889e41a182988b0')

c =B()
c.id
>>ObjectId('600c9d09c889e41a182988b0')

我不明白这种行为,是因为数据class 每次初始化 class 时都保持相同的默认 objectId 引用吗?

你有解决办法吗?

由于上述数据class将被启动为:

class B:
    def __init__(self, x: ObjectId = ObjectId()):
        self.id=x

class 的默认值始终是加载 class 时生成的静态 ObjectId。 最后,我想动态值不应该作为初始化参数传递。

正确的方法是使用 __post_init__:

from dataclasses import field

@dataclass
class B:
    id: ObjectId = field(init=False)

    def __post_init__(self):
        self.id = ObjectId()

b =B()
b.id
>>ObjectId('60104262ee527a385cb44a11')

c =B()
c.id
>>ObjectId('6010426bee527a385cb44a12')