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测试
答案 0 :(得分:1)
field
创建并返回multimedia
的单个实例。
执行dataclasses.Field
时-您只需将一个custom_field = field()
分配给Field
。然后,当您执行custom_field
和y = custom_field
时,就是将同一对象分配给不同的名称。最终发生的事情是,由于它们都是同一个字段的引用,因此仅保留最后分配的一个z = custom_field
。
为什么要这么做
z
它很好用 但是,如果您这样做-
A(x=1, z=3)
由于A(x=1, y=2, z=3)
实际上在类中不存在,因此引发异常。