【发布时间】:2021-12-14 19:17:37
【问题描述】:
考虑这个名为 h.json 的 json 文件,我想将其转换为 python 数据类。
{
"acc1":{
"email":"acc1@example.com",
"password":"acc1",
"name":"ACC1",
"salary":1
},
"acc2":{
"email":"acc2@example.com",
"password":"acc2",
"name":"ACC2",
"salary":2
}
}
我可以使用替代构造函数来获取每个帐户,例如:
import json
from dataclasses import dataclass
@dataclass
class Account(object):
email:str
password:str
name:str
salary:int
@classmethod
def from_json(cls, json_key):
file = json.load(open("h.json"))
return cls(**file[json_key])
但这仅限于在数据类中定义的参数(电子邮件、姓名等)。
如果我要修改 json 以包含其他内容,比如年龄,该怎么办?
该脚本最终会返回一个TypeError,特别是TypeError: __init__() got an unexpected keyword argument 'age'。
有没有办法根据dict(json对象)的key来动态调整class属性,这样就不用每次给json添加新key时都要添加属性了?
【问题讨论】:
-
为了获得这种灵活性,最好将数据保存为 dict,而不是尝试将其放入类中。
-
数据类的意义在于它使您无法像这样定义新字段。如果要动态更改可以定义哪些字段,可以使用类。
标签: python json oop python-dataclasses python-class