Как я могу использовать кортеж как конвертер в attr.ib, не расстраивая mypy? - PullRequest
0 голосов
/ 02 февраля 2020

Я пытаюсь запустить следующий код (урезанный из другого проекта) для 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)

Но я вижу в этом слишком много стандартного кода. Есть ли лучший подход для решения этой проблемы или это единственный способ?

1 Ответ

0 голосов
/ 24 февраля 2020

Я сообщил о проблеме на mypy github repo https://github.com/python/mypy/issues/8389, и это оказалось уже диагностированной ошибкой https://github.com/python/mypy/issues/5313.

...