gpt4 book ai didi

python - 我可以为数据类的子类提供默认值吗?

转载 作者:行者123 更新时间:2023-12-04 11:40:18 25 4
gpt4 key购买 nike

我想创建一个类层次结构,其中类的所有对象 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父类(super class)和默认参数 field1类(class) Sub实际上是在 field2 之后.
根据 the docs on dataclass inheritence 中的示例但是,子类中的字段会覆盖父类(super class)中的字段,但保留了字段顺序。所以这个错误是有道理的。
这里是否有任何合适的解决方法,或者我必须手动实现所有内容?

最佳答案

您可以使用@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

关于python - 我可以为数据类的子类提供默认值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63420416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com