dataclasses.asdict() 未按预期工作
dataclasses.asdict() not working as expected
我正在使用 dataclasses
中的 dataclass
和 asdict
,我发现 asdict
并不像我引入继承时所期望的那样工作。
我使用 dataclasses
帮助我从 classes 创建字典,这样我就可以将它们传递给 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"}
但我得到的只是来自基础的关键字值-class
{"name": "john doe"}
涵盖 dataclass
继承的正确实现 in the docs:
@dataclass
class Base:
name: str
@dataclass
class Child(Base):
age: int
如果没有这个,子 class 中的 __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
我正在使用 dataclasses
中的 dataclass
和 asdict
,我发现 asdict
并不像我引入继承时所期望的那样工作。
我使用 dataclasses
帮助我从 classes 创建字典,这样我就可以将它们传递给 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"}
但我得到的只是来自基础的关键字值-class
{"name": "john doe"}
涵盖 dataclass
继承的正确实现 in the docs:
@dataclass
class Base:
name: str
@dataclass
class Child(Base):
age: int
如果没有这个,子 class 中的 __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