我有以下课程:
@dataclass
class thing:
DATE: datetime.datetime
BEG_DATE: datetime.datetime = self.DATE.replace(day=1))
但是我得到这个错误:
NameError(“未定义名称'DATE'”)
Visual Studio指向我要定义BEG_DATE的第4行。
1)为什么?
2)如何创建具有BEG_DATE
属性并仅将日期更改为1的属性DATE
?
我尝试过field(default_factory=self.DATE.replace(day=1))
,但是遇到了同样的错误。
答案 0 :(得分:1)
对于依赖于其他字段值的字段,您需要利用Post-init processing。现在,Python正在尝试在创建类时而不是在创建实例时评估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))