當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。