Как игнорировать ошибки mypy при использовании NamedTuples со значениями по умолчанию - PullRequest
0 голосов
/ 11 ноября 2018

Мне удалось mypy выполнить проверку типа на NamedTuple и использовать значения по умолчанию для NamedTuple.

Однако при использовании значения по умолчанию у меня всегда возникает ошибка на mypy.

Вот мой код (я использую Python 3.6)

class TestResult(NamedTuple):
    """To store results of a given Test Case"""

    outcome: str
    duration: Optional[int]  # in seconds
    comment: Optional[str]
    msg: Optional[str]


TestResult.__new__.__defaults__ = (None,) * 3  # type: ignore  # Hack for Python < 3.7

Когда я делаю passed_tc = TestResult("Passed"), у меня появляется следующее сообщение об ошибке

ошибка: слишком мало аргументов для "TestResult"

Кто-нибудь получил представление о том, как сказать mypy, что мы можем иметь необязательные аргументы и избежать этой ошибки?

1 Ответ

0 голосов
/ 12 ноября 2018

Назначьте значения, для которых требуются значения по умолчанию, с желаемыми значениями по умолчанию. Например:

from typing import NamedTuple, Optional

class Test(NamedTuple):
    foo: str
    bar: Optional[str] = None
    qux: int = 100

t = Test("foo")

Я проверил, что это работает во время выполнения для Python 3.6 и 3.7, и подтвердил, что он проверяет тип, как и ожидалось, используя mypy 0.641.

...