使用具有默认值的 NamedTuples 时如何忽略 mypy 错误

How to ignore mypy errors when using NamedTuples with default values

我已经能够让 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") 时,出现以下错误消息

error:Too few arguments for "TestResult"

有人知道如何告诉 mypy 我们可以有可选参数并避免这个错误吗?

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

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 确认它按预期进行类型检查。