如何在不注释类型的情况下添加数据类字段?


问题内容

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

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

问题答案:

数据类装饰器通过在中查找名称来检查类以查找字段__annotations__
字段的存在是注释的存在,因此,您确实需要注释。

但是,您可以使用通用的一种:

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