用于类型注释的类型注释是什么?

5
当一个函数接受类型注释作为参数时,你会使用哪种类型的注释?
为什么我要将类型注释作为参数?
我有一个函数,它尝试根据类型注释解析字符串。
例如:
def get_appropriate_type_converter(type_annotation) -> Callable[[str], 'type_annotation']:

e.g.

get_appropriate_type_converter(Dict[str, int])("aaa:3,bbb:4") == dict(aaa=3, bbb=4)

我希望对这个函数进行类型注释。


你计划如何将这些类型注释用作参数?你能提供一个get_appropriate_type_converter函数的实现示例吗? - a_guest
好的,这段内容太长了,无法在评论中发布,但大致意思是: 返回 str2bool 如果类型注释是整型、浮点型或字符串型: 返回类型注释本身 如果类型注释是 IntEnum 的子类: 返回整型``` - Peter
1
这个回答解决了你的问题吗?如何对值本身就是类型提示的变量进行类型提示? - Gino Mempin
1个回答

4

通过一些调查,我们可以检测出类似 Dict[str,int] 的类型是什么:

>>> from typing import *
>>> x = Dict[str, int]
>>> type(x)
<class 'typing._GenericAlias'>
>>> y = Union[str, float]
>>> type(y)
<class 'typing._GenericAlias'>

所以我猜想你会使用注释typing._GenericAlias来指示你使用了一个类型别名,但我手头没有工具可以确认这一点。


我在运行时得到了<class 'typing.GenericMeta'>(Python 3.6.11 - 你在运行哪个版本?)。 - Peter
1
Python 3.7,虽然 type(Dict[str,int]) 对于两个版本都可以工作,但传递注释非常不寻常,因此如果在版本之间存在不同的名称,我也不会感到惊讶。 - Tadhg McDonald-Jensen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接