当数据类中有一个字段的类型可以是任何类型时,你怎么能省略注释呢?
@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>
为了在没有类型注释的情况下将
fav_duck
添加为数据类字段,你可以使用
dataclasses.field
并将
init
、
repr
和
compare
设置为
True
。
from dataclasses import dataclass, field
@dataclass
class Favs:
fav_number: int = 80085
fav_duck: object = field(default_factory=object, init=True, repr=True, compare=True)
fav_word: str = 'potato'
现在,
fav_duck
将被包含为数据类字段,其默认值为一个新创建的对象。
>>> Favs()
Favs(fav_number=80085, fav_duck=<object object at 0x7f8a9a7d63b0>, fav_word='potato')
>>> print(*Favs.__dataclass_fields__)
fav_number fav_duck fav_word
这确保
fav_duck
在初始化、表示和比较中被视为数据类的一部分。