我正在尝试为 attrib 编写一个转换器,将 Type1 的 IterableA 转换为 IterableB 或 Type2。
例如:
converter = make_iter_converter(tuple, int)
converter(["1", "2"])
>>> (1, 2)
我想给make_iter_converter
函数正确地添加类型注解,但我不确定如何正确地执行。下面是我的尝试:
_ITEMS_T = TypeVar("_ITEMS_T")
_ITEM_T = TypeVar("_ITEM_T")
def make_iter_converter(
items_converter: Callable[[Iterator], _ITEMS_T],
item_converter: Callable[[Any], _ITEM_T],
) -> Callable:
def wrapped(items: Iterator) -> _ITEMS_T[_ITEM_T]:
return items_converter(item_converter(item) for item in items)
return wrapped
然而,当我尝试使用_ITEMS_T[_ITEM_T]
作为 Package 函数的返回类型时,这会引发一个错误:
TypeError: 'TypeVar' object is not subscriptable
我了解到 TypeVar 对象不能像其他类型那样使用方括号。有没有办法修复这个错误并正确地注解函数?我知道 Generic 类可以接受类型参数,但这需要定义一个单独的类,我不认为这是一个很好的解决方案。
1条答案
按热度按时间wj8zmpe11#
这一个工作,pylance 是能够告诉输出类型的基础上输入。