簡體   English   中英

我可以為數據類的子類提供默認值嗎?

[英]Can I provide defaults for a subclass of a dataclass?

我想創建一個 class 層次結構,其中 class Base的所有對象都有一個字段field1 ,但不同的子類對field1有不同的默認值。 這些類是數據持有者,因此dataclasses似乎是完美的庫。

考慮以下 python 3.7+ 代碼。

from dataclasses import dataclass, field
from typing import Any, Iterable

@dataclass
class Base:
    field1: Iterable[Any]

@dataclass
class Sub(Base):
    field2: Any
    field1: Iterable[Any] = field(default_factory=list)

代碼失敗,給我TypeError: non-default argument 'field2' follows default argument 這有點令人驚訝,因為field2遵循超類的非默認field1 ,而 class Sub的默認參數field1實際上位於field2之后。

根據 數據類繼承文檔中的示例,子類中的字段覆蓋超類中的字段,但保留了字段順序。 所以這個錯誤是有道理的。

這里有什么合適的解決方法,還是我必須手動實現所有東西?

您可以使用 @property 裝飾器:

from dataclasses import dataclass
from typing import Any, Iterable

@dataclass
class Base:
    @property
    def field1(self) -> Iterable[Any]:
        return

@dataclass
class Sub(Base):
    field2: Any

    @property
    def field1(self) -> Iterable[Any]:
        return []  # or whatever default you want to put here

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM