预期行为还是python数据类的错误?

时间:2020-11-11 13:26:02

标签: python

from dataclasses import field, dataclass

custom_field = field()

@dataclass
class A:
    x: int
    y: int = custom_field
    z: int = custom_field

A(x=1, y=2, z=3)

执行以下代码后,出现此错误:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-8-1314913987c2> in <module>
----> 1 A(x=1, y=2, z=3)

TypeError: __init__() got an unexpected keyword argument 'y'

我可以通过使用以下代码来克服此问题:

from dataclasses import field, dataclass

custom_field = lambda: field()

@dataclass
class A:
    x: int
    y: int = custom_field()
    z: int = custom_field()

A(x=1, y=2, z=3)

经过python 3.7.9测试

1 个答案:

答案 0 :(得分:1)

field创建并返回multimedia的单个实例。

执行dataclasses.Field时-您只需将一个custom_field = field()分配给Field。然后,当您执行custom_fieldy = custom_field时,就是将同一对象分配给不同的名称。最终发生的事情是,由于它们都是同一个字段的引用,因此仅保留最后分配的一个z = custom_field

为什么要这么做

z

它很好用 但是,如果您这样做-

A(x=1, z=3)

由于A(x=1, y=2, z=3) 实际上在类中不存在,因此引发异常。