如何使用元组作为attr.ib的转换器,而不会影响mypy?

问题描述 投票:0回答:1

我正在尝试对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)

但是我认为这是太多样板代码。有没有更好的方法来解决这个问题,或者这是唯一的方法吗?

python attr mypy
1个回答
0
投票

我在mypy github存储库https://github.com/python/mypy/issues/8389上报告了该问题,结果是已经被诊断出的错误https://github.com/python/mypy/issues/5313

© www.soinside.com 2019 - 2024. All rights reserved.