【发布时间】:2021-09-27 01:55:24
【问题描述】:
在dataclass 的文档中,在实例初始化时进行一些额外计算时给出了以下示例:
@dataclass
class C:
a: float
b: float
c: float = field(init=False)
def __post_init__(self):
self.c = self.a + self.b
在示例中,field 函数使用init=False 调用。我想知道为什么这是必需的,因为它似乎不需要。我错过了什么重要的事情吗?
例如,以下代码似乎也可以正常工作:
@dataclass
class C:
a: float
b: float
def __post_init__(self):
self.c = self.a + self.b
self.d = self.a**2 + self.b**2
在调用__post_init__之前没有定义属性的第二个例子可能会导致任何问题吗?我想知道,因为我正在做类似于第二个示例的操作,但具有更多属性,并且添加了 b 是 InitVar,我还没有发现任何问题。
【问题讨论】:
-
第二类
C没有属性c或d。只有它的实例可以。这是否是一个问题取决于您对数据类的依赖程度,好吧,数据类。