Dataclasses 和 TypedDicts 之间的类型检查转换

问题描述

我有一堆 @dataclasses 和一堆相应的 TypedDicts,我想促进它们之间的平滑和类型检查转换。

例如,考虑

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 (将#修改为@)