gpt4 book ai didi

python - mypy `TypedDict` 的工厂函数

转载 作者:行者123 更新时间:2023-12-01 01:32:14 25 4
gpt4 key购买 nike

我希望能够编写一个函数来检查字典是否符合我的 TypedDict,但是我无法获得正确的泛型类型。所以结果函数应该是这样的:

T = typing.Generic('T', bound=...) # This is `bound=...` something I want to find out

def check_typeddict(value: dict, to_type: typing.Type[T]) -> T:
# do some type checking
return typing.cast(T, value)

check_type(MyTypedDict, {'a': 5})

像使用 TypedDictdict 作为 bound 值这样的事情不起作用,这根本不可能(还)还是我我还缺少其他东西吗?

最佳答案

您不应该使用Generic——您需要使用TypeVar。我们使用 Generic 来声明某个类应该被视为泛型;我们使用 TypeVar 创建类型变量(然后我们可以使用它来帮助创建泛型类或函数)。

您还可以在对 check_type 的调用中交换参数(也可能是 check_typeddict)。

将这些放在一起,代码的功能版本如下所示:

from typing import TypeVar, Type, cast
from mypy_extensions import TypedDict

class MyTypedDict(TypedDict):
a: int
b: int

T = TypeVar('T')

def check_typeddict(value: dict, to_type: Type[T]) -> T:
# do some type checking
return cast(T, value)

out = check_typeddict({'a': 5}, MyTypedDict)
reveal_type(out) # Mypy reports 'MyTypedDict'

在这种情况下不需要限制。

关于python - mypy `TypedDict` 的工厂函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52747473/

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