当数据类中有一个字段的类型可以是任何内容时,如何省略注释?

@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>

最佳答案

DataClass Decorator通过在__annotations__中查找名称来检查类以查找字段。It is the presence of annotation which makes the field,因此,您确实需要注释。
但是,您可以使用通用的:

@dataclass
class Favs:
    fav_number: int = 80085
    fav_duck: 'typing.Any' = object()
    fav_word: str = 'potato'

09-26 15:27