如何创建 class 属性,该属性是同一 class 属性的变体

How to create class attribute that is an alteration of the same class attribute

我有以下 class:

@dataclass
class thing:
    DATE: datetime.datetime
    BEG_DATE: datetime.datetime = self.DATE.replace(day=1)) 

但是我得到这个错误:

NameError("name 'DATE' is not defined")

Visual Studio 指向我试图定义 BEG_DATE.

的第 4 行

1) 为什么?

2) 如何创建采用 DATE 属性并将日期更改为 1 的属性 BEG_DATE

我试过 field(default_factory=self.DATE.replace(day=1)),但我遇到了同样的错误。

对于依赖于其他字段值的字段,您需要利用Post-init processing。你现在这样做的方式是,Python 试图在创建 class 时计算 self.DATE.replace(day=1),而不是在创建实例时计算。

from dataclasses import dataclass, field

@dataclass
class thing:
    DATE: datetime.datetime
    BEG_DATE: datetime.datetime = field(init=False)

    def __post_init__(self):
        self.BEG_DATE = self.DATE.replace(day=1))