[英]dataclasses.asdict() not working as expected
我使用的dataclass
和asdict
從dataclasses
,我發現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"}
docs涵蓋了dataclass
繼承的正確實現:
@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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.