【发布时间】:2022-11-03 01:25:38
【问题描述】:
我想在调用 asdict() 后忽略默认值
@dataclass
class A:
a: str
b: bool = True
所以如果我打电话
a = A("1")
result = asdict(a, ignore_default=True)
assert {"a": "1"} == result # the "b": True should be deleted
【问题讨论】:
-
这是不可能的。
a = A(1)和b = A(1, True)没有区别 -
我想 asdict 返回一个没有默认值的字典
-
对于不可变类型,这并不太难,但否则很难区分
b = []; a = A(b)和a = A([])(在这两种情况下,成员都是[],但在第一种情况下,它是“重要的”,因为它与b外面的对象)。如果您不关心这种情况,那么您可以从上面的问题中调整一些代码。 -
你需要区分上面提到的
A(1)和A(1, True)的情况吗?如果是,您可以连接到A的__init__函数来记录类型。否则,如果您可以修改数据类类型创建,则只需使用exclude元数据,否则修改asdict函数,但如果默认值类似于default_factory([]),则会出现上述问题。