定义
对于常见和简单的用例,不需要其他功能。但是,有些数据类功能需要额外的每字段信息。为了满足这种对附加信息的需求,你可以通过调用提供的 field() 函数来替换默认字段值。
用法
提供了一个方法field(),如果通过调用 field() 指定字段的默认值,则该字段的类属性将替换为指定的 default 值。如果没有提供 default ,那么将删除类属性。目的是在 dataclass() 装饰器运行之后,类属性将包含字段的默认值,就像指定了默认值一样。
语法:
dataclasses.field(*, default=MISSING, default_factory=MISSING, repr=True, hash=None, init=True, compare=True, metadata=None)
MISSING 值是一个 sentinel 对象,用于检测是否提供了 default 和 default_factory 参数。 使用此 sentinel 是因为 None 是 default 的有效值。任何代码都不应直接使用 MISSING 值。
参数:
default
:如果提供,这将是该字段的默认值。这是必需的,因为 field()
调用本身会替换一般的默认值。
default_factory
:如果提供,它必须是一个零参数可调用对象,当该字段需要一个默认值时,它将被调用。除了其他目的之外,这可以用于指定具有可变默认值的字段,如下所述。 同时指定 default
和 default_factory
将产生错误。
init
:如果为true(默认值),则该字段作为参数包含在生成的 __init__()
方法中。
repr
:如果为true(默认值),则该字段包含在生成的 __repr__()
方法返回的字符串中。
compare
:如果为true(默认值),则该字段包含在生成的相等性和比较方法中( __eq__()
, __gt__()
等等)。
hash
:这可以是布尔值或 None
。如果为true,则此字段包含在生成的 __hash__()
方法中。如果为 None
(默认值),请使用 compare
的值,这通常是预期的行为。如果字段用于比较,则应在 hash 中考虑该字段。不鼓励将此值设置为 None
以外的任何值。
设置 hash=False
但 compare=True
的一个可能原因是,如果一个计算 hash 的代价很高的字段是检验等价性需要的,但还有其他字段可以计算类型的 hash 。 即使从 hash 中排除某个字段,它仍将用于比较。
metadata
:这可以是映射或 None 。 None 被视为一个空的字典。这个值包含在 MappingProxyType()
中,使其成为只读,并暴露在 Field
对象上。数据类根本不使用它,它是作为第三方扩展机制提供的。多个第三方可以各自拥有自己的键值,以用作元数据中的命名空间。
参考文档:https://docs.python.org/zh-cn/3/library/dataclasses.html