Python数据类对属性进行后期初始化



dataclass的文档中,当在实例初始化时进行一些额外计算时,给出了以下示例:

@dataclass
class C:
a: float
b: float
c: float = field(init=False)
def __post_init__(self):
self.c = self.a + self.b

在本例中,使用init=False调用field函数。我想知道为什么需要这样做,因为它似乎并不需要。我错过了什么重要的事情吗?

例如,以下代码似乎也可以正常工作:

@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__之前没有定义属性,这可能会导致任何问题吗?我想知道,因为我正在做类似于第二个例子的事情,但有更多的属性,并且添加了bInitVar,我还没有注意到任何问题。

在这种情况下,

@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

cdC的实例中可用,但所述实例的repr不包括,例如:

somec = C(3.0,5.0)
print(somec)

输出

C(a=3.0, b=5.0)

最新更新