gpt4 book ai didi

python - 正确的方法是使用类型提示/泛型来描述类型类 ("type"的参数)

转载 作者:行者123 更新时间:2023-11-28 17:29:22 25 4
gpt4 key购买 nike

这似乎类似于 Type Hinting: Argument Of Type Class , 但是,那里接受的答案实际上并没有回答我的问题,所以可能问题表达不正确(?)

我有一个序列化/反序列化框架,可以从 [IDE 支持的] 类型提示中受益匪浅。 API 看起来像这样:

def serialize(obj:BaseModel) -> Dict[str,Any]:
""" Serialize the object to a dictionary. """

def deserialize(data:Dict[str,Any], clazz:type) -> BaseModel:
""" Deserialize dictionary into a model object of type clazz. """

序列化方法很好,但反序列化类型提示不是最优的。我想说明 deserialize 的返回值将是 clazz 类型的对象(它是 BaseModel 的子类)。这似乎像泛型可以提供帮助的东西,但我不确定如何表达我想要的东西。

T = TypeVar('T', bound=BaseModel)

def deserialize(data:Dict[str,Any], clazz:T) -> T:
""" Deserialize dictionary into a model object of type clazz. """

这似乎是错误的,因为 clazz 是从 T 派生的,而不是类型 T 的对象(实例)。

我已经阅读了一些资料,但没有找到答案(用谷歌搜索这个特定问题也很棘手)。是否有明显的我在这里遗漏的东西,或者这只是 python 3.5 键入模块不支持?

诚然,我仍然受制于我的工具来推断类型,但希望如果有正确的方法来执行此操作,它将由类型检查实用程序实现。

最佳答案

既然一个类可以被认为是一个返回的可调用对象和它自己的实例,也许你可以尝试:

T = TypeVar('T', bound=BaseModel)

def deserialize(data: Dict[str, Any], clazz: Callable[..., T]) -> T:
""" Deserialize dictionary into a model object of type clazz. """

省略号 (...) 表示类的调用签名未指定。因此,一个可调用对象接受未指定的参数并返回 T 的实例。

关于python - 正确的方法是使用类型提示/泛型来描述类型类 ("type"的参数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35655257/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com