gpt4 book ai didi

python - dataclasses.asdict() 没有按预期工作

转载 作者:太空宇宙 更新时间:2023-11-03 23:58:36 27 4
gpt4 key购买 nike

我正在使用来自 dataclassesdataclassasdict ,我发现 asdict 并不像我在引入继承时所期望的那样工作。

我使用 dataclasses 来帮助我从类创建字典,这样我就可以将它们传递给 django.shortcuts.render

from dataclasses import dataclass
from dataclasses import asdict

@dataclass
class Base:
name: str

class Test(Base):
def __init__(self, age, *args, **kwargs):
self.age = age
super(Test, self).__init__(*args, **kwargs)

test = Test(age=20, name="john doe")

print(asdict(test))

我希望输出是

{"age": 20, "name": "john doe"}

但我得到的只是来自基类的关键字值

{"name": "john doe"}

最佳答案

涵盖了数据类 继承的正确实现 in the docs :

@dataclass
class Base:
name: str

@dataclass
class Child(Base):
age: int

如果没有这个,子类中的 __dataclass_fields__ 属性(asdict 用来确定字典中应该包含的内容)并不知道您的所有字段关心;它只有继承的版本:

>>> Test.__dataclass_fields__
{'name': Field(...)}
>>> Test.__dataclass_fields__ is Base.__dataclass_fields__
True
>>> Child.__dataclass_fields__
{'name': Field(...), 'age': Field(...)}
>>> Child.__dataclass_fields__ is Base.__dataclass_fields__
False

另请注意,您可以将导入简化为:

from dataclasses import asdict, dataclass

关于python - dataclasses.asdict() 没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56595683/

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