如何覆盖Python数据类'asdict'方法

Mar*_*kus 12 python python-dataclasses

我有一个数据类,如下所示:

@dataclass
class myClass:
   id: str
   mode: str
   value: float
Run Code Online (Sandbox Code Playgroud)

这导致:

dataclasses.asdict(myClass)
{"id": id, "mode": mode, "value": value}
Run Code Online (Sandbox Code Playgroud)

但我想要的是

{id:{"mode": mode, "value": value}}
Run Code Online (Sandbox Code Playgroud)

我认为我可以通过to_dict向我的数据类添加一个方法来实现此目的,该方法返回所需的字典,但这不起作用。

我怎样才能得到我想要的结果?

Evg*_*din 6

from dataclasses import dataclass, asdict


@dataclass
class myClass:
    id: str
    mode: str
    value: float


def my_dict(data):
    return {
        data[0][1]: {
            field: value for field, value in data[1:]
        }
    }


instance = myClass("123", "read", 1.23)

data = {"123": {"mode": "read", "value":  1.23}}

assert asdict(instance, dict_factory=my_dict) == data
Run Code Online (Sandbox Code Playgroud)

  • 是否有重载/覆盖 asdict 函数?我需要改变某些嵌套数据类的 asdict 行为,但不需要改变其他数据类。 (7认同)