如何解决Dataclasses 和 TypedDicts 之间的类型检查转换
我有一堆 @dataclass
es 和一堆相应的 TypedDict
s,我想促进它们之间的平滑和类型检查转换。
例如,考虑
from dataclasses import dataclass
from typing_extensions import TypedDict
@dataclass
class Foo:
bar: int
baz: int
@property
def qux(self) -> int:
return bar + baz
class SerializedFoo(TypedDict):
bar: int
baz: int
qux: int
def serialize(foo: Foo) -> SerializedFoo:
return SerializedFoo(
bar=foo.bar,baz=foo.baz,qux=foo.qux,)
但是对于很多类型这样做变得很乏味,而且每次更新类型时,我也必须更新序列化函数。
我也可以做类似的事情
def serialize(foo: Foo) -> SerializedFoo:
return SerializedFoo(**dataclasses.asdict(foo))
但这不会进行类型检查; mypy
抱怨它Expected keyword arguments,{...},or dict(...) in TypedDict constructor
。
理论上,足够聪明的类型检查器应该可以知道数据类具有初始化类型字典所需的属性,但是当然 asdict
的使用使得这在实践中是不可能的。
是否有更好的方法将 dataclass
转换为具有相应字段的 TypedDict
,这让我都可以让类型检查器在出现问题时告诉我,而不必输入每个字段在转换中?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。