如何制作类型检查器将识别为str的自定义注释?

时间:2019-02-09 23:19:18

标签: python

我想使用参数注释来定义参数解析器。

这里是一个例子:

def parser(arg: str) -> str:
    return do_something(arg)

def foo(a: parser):
    # get arg's annotation and parse it
    return get_annotation(foo, "a")(a)

问题在于,当我使用类型为str的参数调用该函数时,类型检查器会警告我它不是parser类型的。

foo("hello")

我的问题:如何才能两全其美,如何使用注释功能获得parser,而类型检查器将获得str? (最好不使用Union

也许这种方法可行:

def foo(a: parser[str]):
    # get arg's annotation and parse it
    return get_annotation(foo, "a")(a)

foo("hello") # this compiles without any warnings

类似于OptionalUnion的排序返回一个对象,但是类型检查器将它们分析为不同的对象。

1 个答案:

答案 0 :(得分:0)

Python 3.9添加了Annotated类型,因此您可以执行以下操作:

def foo(a: Annotated[str, parser]):
    # a is of type str, but has parser as metadata
    pass