python 的数据类上的不可变字段

Unmutable field on python's dataclass

我有这个数据类:

@dataclass
class Couso:
    nome: str
    date: str = field(default=datetime.now(), init = False)
    id_: str = field(default=key())

作为 key() 一个简单的函数,returns len 32 上的一个 str。

当我创建多个 类 时(显然没有指定 id_)它们都共享相同的 id_

但为什么会这样呢?看不懂。

此外,属性 date 会再次发生这种情况吗?

key之前被调用field被调用来创建字段,这样每个实例都会有相同的默认id_属性.这和你写的一样

x = key()


@dataclass
class Couso:
    ...
    id_ : str = field(default=x)

如果您想在每次创建新实例时都调用 key,请改用 default_factory

id_: str = field(default_factory=key)  # key is not called; it's passed as an object.

datetime.now也是如此:

date: str = field(default_factory=datetime.now, init = False)