当数据类中有一个类型可以是任何类型的字段时,如何省略注释?
@dataclass
class Favs:
fav_number: int = 80085
fav_duck = object()
fav_word: str = 'potato'
上面的代码似乎并没有为fav_duck
创建一个字段。它只是使它成为一个普通的旧类属性。
>>> Favs()
Favs(fav_number=80085, fav_word='potato')
>>> print(*Favs.__dataclass_fields__)
fav_number fav_word
>>> Favs.fav_duck
<object at 0x7fffea519850>
答案 0 :(得分:5)
数据类装饰器通过在 match("action url: ""(*.?)"" CaptureGroup(1).Value", inputstring)
中查找名称来检查类以查找字段。 It is the presence of annotation which makes the field,所以,你需要一个注释。
但是,您可以使用通用的:
__annotations__
答案 1 :(得分:-1)
根据定义数据类含义的PEP 557,
dataclass
装饰器检查类以查找字段。字段定义为__annotations__
中标识的任何变量。也就是说,一个具有类型注释的变量。
这就是说,这个问题的前提(例如&#34;我如何将dataclass
与没有类型注释的字段一起使用)必须被拒绝。术语&#39;字段&#39;在dataclass
的上下文中,必须根据定义对属性进行类型注释。
请注意,使用类似typing.Any
的通用类型注释与具有未注释属性的注释不同,因为该属性将显示在__annotations__
中。
最后,在仅提供属性名称的情况下,辅助函数make_dataclass
将自动使用typing.Any
作为类型注释,并且在PEP中也提到了一个示例。