【问题标题】:How to overwrite Python Dataclass 'asdict' method如何覆盖 Python Dataclass 'asdict' 方法
【发布时间】:2020-10-19 06:47:19
【问题描述】:

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

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

这会导致:

dataclasses.asdict(myClass)
{"id": id, "mode": mode, "value": value}

但我想要的是

{id:{"mode": mode, "value": value}}

我想我可以通过在我的数据类中添加一个to_dict 方法来实现这一点,该方法返回所需的字典,但这不起作用。

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

【问题讨论】:

  • 您对文档中的examples 用法有何看法?
  • 那会留下字符串“id”而不是 myClass.id 的值作为第一个键,对吧?对不起,我是一个初学者:D
  • 好的,我明白你对"id" 的意思了。所以添加一个to_dict() 方法会产生你想要的任何东西。这在什么方面不起作用?
  • 向 myClass 添加“to_dict(self)”方法不会改变 dataclasses.asdict(myClass) 的输出。如果我通过 myClass.to_dict() 调用该方法,它可以工作
  • 所以只需致电myClass.to_dict()

标签: python python-dataclasses


【解决方案1】:
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

【讨论】:

    猜你喜欢
    • 2021-01-14
    • 2020-11-17
    • 2022-09-30
    • 2021-10-16
    • 2020-05-09
    • 2016-02-28
    • 1970-01-01
    • 2019-01-14
    • 1970-01-01
    相关资源
    最近更新 更多