我正在尝试对mypy运行以下代码(从另一个项目中删除):
import attr
from typing import Tuple
@attr.s
class Test:
x: Tuple[int, ...] = attr.ib(converter=tuple)
l = [1, 2]
Test(l)
但是我仍然收到以下错误消息:
<string>:7: error: Argument 1 to "Test" has incompatible type "List[int]"; expected "Iterable[_T_co]"
到目前为止,我发现克服此错误消息的唯一方法是显式定义这样的包装函数
def int_tpl(int_lst: Iterable[int]) -> Tuple[int, ...]:
return tuple(int_lst)
并使用它为属性定义转换器:
x: Tuple[int, ...] = attr.ib(converter=int_tpl)
但是我认为这是太多样板代码。有没有更好的方法来解决这个问题,或者这是唯一的方法吗?
我在mypy github存储库https://github.com/python/mypy/issues/8389上报告了该问题,结果是已经被诊断出的错误https://github.com/python/mypy/issues/5313。