Python 用于获取与静态类型检查器一起使用的TypedAct值类型的函数
我希望制作一个Python(3.8+)函数,它是:Python 用于获取与静态类型检查器一起使用的TypedAct值类型的函数,python,dictionary,mypy,python-typing,Python,Dictionary,Mypy,Python Typing,我希望制作一个Python(3.8+)函数,它是: 输入:aTypedDict的键 输出: 返回值(简单) 适当地暗示了类型(我被卡住的地方) 下面是一个代码示例,有助于解释: 从键入import Any、Literal、TypedDict Foo类(类型Ddict): 酒吧:int baz:str 垃圾邮件:有吗 foo=foo(bar=0,baz=“hi”,spam=1.0) def get_type(key:Literal[“bar”,“baz”]):#如何在此处键入提示返回?
- 输入:a
TypedDict的键
- 输出:
- 返回值(简单)
- 适当地暗示了类型(我被卡住的地方)
从键入import Any、Literal、TypedDict
Foo类(类型Ddict):
酒吧:int
baz:str
垃圾邮件:有吗
foo=foo(bar=0,baz=“hi”,spam=1.0)
def get_type(key:Literal[“bar”,“baz”]):#如何在此处键入提示返回?
“”“传递键时获取TypedAct值的函数。”“”
val=foo[key]
#这是通过智能索引实现的
#见:https://mypy.readthedocs.io/en/stable/literal_types.html#intelligent-索引
显示类型(val)#mypy:显示类型为“Union[builtins.int,builtins.str]”
返回值
获取类型=获取类型(“条形”)
显示类型(获取类型)#mypy:显示类型为“任意”
#我希望这个有输出:“int”
如果您不知道,我使用的静态类型检查器是mypy
我上面的函数get\u type
已经完成了一半,但我不确定如何键入提示返回get\u type
对于返回get\u type
,我应该输入什么类型的提示
研究 这两个问题
使用
TypeVar
提供答案。是否有某种方法可以将TypeVar
与TypedDict
一起使用?如果我正确理解了您的问题,您可以使用@overload
进行get\u type
:
from typing import Any, Literal, TypedDict, Union, overload
class Foo(TypedDict):
bar: int
baz: str
spam: Any
foo = Foo(bar=0, baz="hi", spam=1.0)
@overload
def get_type(key: Literal["bar"]) -> int: ...
@overload
def get_type(key: Literal["baz"]) -> str: ...
def get_type(key: Literal["bar", "baz"]) -> Union[int, str]:
"""Function that get TypedDict's value when passed a key."""
val = foo[key]
reveal_type(val) # mypy: Revealed type is 'Union[builtins.int, builtins.str]'
return val
fetched_type = get_type("bar")
reveal_type(fetched_type) # mypy: Revealed type is 'builtins.int'
非常感谢@alex_noname,这很有效!在我的实际用例中,有很多键。使用此解决方案,
get\u type
方法具有相当多的重载
s,并且不会有“轻量级”的感觉。我会坚持在给出答案之前,以防有一种不那么冗长的方法来解决这个问题。