我想使用参数注释来定义参数解析器。
这里是一个例子:
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
类似于Optional
或Union
的排序返回一个对象,但是类型检查器将它们分析为不同的对象。
答案 0 :(得分:0)
Python 3.9添加了Annotated类型,因此您可以执行以下操作:
def foo(a: Annotated[str, parser]):
# a is of type str, but has parser as metadata
pass