假设我想初始化以下数据集
from dataclasses import dataclass
@dataclass
class Req:
id: int
description: str
我当然可以这样做:
data = make_request() # gives me a dict with id and description as well as some other keys.
# {"id": 123, "description": "hello", "data_a": "", ...}
req = Req(data["id"], data["description"])
但是,我是否可以使用字典解压来完成这个任务,因为我需要的键总是字典的子集?
req = Req(**data) # TypeError: __init__() got an unexpected keyword argument 'data_a'
发布于 2021-07-17 04:34:53
您可以引入一个新函数来执行从dict到dataclass的给定转换:
import inspect
from dataclasses import dataclass
@dataclass
class Req:
id: int
description: str
def from_dict_to_dataclass(cls, data):
return cls(
**{
key: (data[key] if val.default == val.empty else data.get(key, val.default))
for key, val in inspect.signature(Req).parameters.items()
}
)
from_dict_to_dataclass(Req, {"id": 123, "description": "hello", "data_a": ""})
# Output: Req(id=123, description='hello')
注意,需要if val.default == val.empty
条件来检查数据集是否有默认值集。如果这是真的,那么在构造数据块时,我们应该考虑给定的值。
https://stackoverflow.com/questions/68417319
复制相似问题