当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python dataclasses.field用法及代码示例


用法:

dataclasses.field(*, default=MISSING, default_factory=MISSING, init=True, repr=True, hash=None, compare=True, metadata=None, kw_only=MISSING)

对于常见和简单的用例,不需要其他函数。但是,有些数据类函数需要额外的 per-field 信息。为了满足对附加信息的需求,您可以通过调用提供的field() 函数来替换默认字段值。例如:

@dataclass
class C:
    mylist: list[int] = field(default_factory=list)

c = C()
c.mylist += [1, 2, 3]

如上所示,MISSING值是一个哨兵对象,用于检测是否有用户提供了某些参数。使用此标记是因为None 是某些具有不同含义的参数的有效值。任何代码都不应直接使用MISSING 值。

field() 的参数是:

  • default :如果提供,这将是该字段的默认值。这是必需的,因为 field() 调用本身会替换默认值的正常位置。

  • default_factory :如果提供,它必须是 zero-argument 可调用对象,当该字段需要默认值时将调用该可调用对象。除其他目的外,这可用于指定具有可变默认值的字段,如下所述。同时指定 defaultdefault_factory 是错误的。

  • init :如果为 true(默认值),则此字段作为参数包含在生成的 __init__() 方法中。

  • repr :如果为 true(默认值),则此字段包含在生成的 __repr__() 方法返回的字符串中。

  • hash :这可以是布尔值或 None 。如果为真,则此字段包含在生成的__hash__() 方法中。如果 None(默认),使用 compare 的值:这通常是预期的行为。如果某个字段用于比较,则应在哈希中考虑该字段。不鼓励将此值设置为 None 以外的任何值。

    设置 hash=False 但设置 compare=True 的一个可能原因是,如果一个字段计算哈希值的成本很高,则需要该字段进行相等性测试,并且还有其他字段有助于该类型的哈希值。即使某个字段从哈希中排除,它仍将用于比较。

  • compare:如果为 true(默认值),则此字段包含在生成的相等和比较方法中(__eq__()__gt__() 等)。

  • metadata :这可以是映射或无。 None 被视为空字典。此值包含在MappingProxyType() 中以使其只读,并在Field 对象上公开。数据类根本不使用它,而是作为第三方扩展机制提供的。多个third-parties 可以各自拥有自己的 key ,用作元数据中的命名空间。

  • kw_only :如果为真,该字段将被标记为仅限关键字。这在计算生成的__init__() 方法的参数时使用。

3.10 版中的新函数。

如果通过调用 field() 指定了字段的默认值,则该字段的类属性将被指定的 default 值替换。如果没有提供default,那么类属性将被删除。目的是在 dataclass() 装饰器运行后,类属性将全部包含字段的默认值,就像指定了默认值本身一样。例如,之后:

@dataclass
class C:
    x: int
    y: int = field(repr=False)
    z: int = field(repr=False, default=10)
    t: int = 20

类属性 C.z 将为 10 ,类属性 C.t 将为 20 ,并且不会设置类属性 C.xC.y

相关用法


注:本文由纯净天空筛选整理自python.org大神的英文原创作品 dataclasses.field。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。