[英]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.