将NamedTuples与默认值一起使用时如何忽略mypy错误

时间:2018-11-11 01:39:40

标签: python python-3.x namedtuple mypy

我已经能够让mypyNamedTuple进行类型检查,并为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 :(得分:2)

为需要默认值的值分配所需的默认值。例如:

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进行了预期的类型检查。