【发布时间】:2019-06-03 16:01:04
【问题描述】:
我有一个dataclass,我想知道每个字段是否已明确设置,或者是否由default 或default_factory 填充。
我知道我可以使用 dataclasses.fields(...) 获取所有字段,这可能适用于使用 default 的字段,但不适用于使用 default_factory 的字段。
我的最终目标是合并两个数据类实例 A 和 B。而 B 应该只覆盖 A 的字段,其中 A 使用默认值。
用例是一个配置对象,可以在多个位置中指定,其中一些位置比其他位置具有更高的优先级。
编辑:一个例子
from dataclasses import dataclass, field
def bar():
return "bar"
@dataclass
class Configuration:
foo: str = field(default_factory=bar)
conf1 = Configuration(
)
conf2 = Configuration(
foo="foo"
)
conf3 = Configuration(
foo="bar"
)
我想检测到 conf1.foo 正在使用默认值,并且 conf2.foo 和 conf3.foo 已明确设置。
【问题讨论】:
-
你控制类定义吗?你能提供一个minimal reproducible example吗?我猜想如果 Class 中没有机制来捕获超出初始默认分配的属性分配,这是不可能的。
-
我添加了一个简单的例子。我希望它有所帮助。
-
是的,我控制着所有的课程。我曾希望有一种内置的方法来做到这一点。我不是 Python 专家,数据类非常优雅且易于使用。
标签: python python-3.x python-dataclasses