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

我已经能够有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我们可以有可选参数并避免此错误?


侃侃无极
浏览 129回答 1
1回答

慕姐4208626

使用所需的默认值分配需要默认值的值。例如:from typing import NamedTuple, Optionalclass Test(NamedTuple):&nbsp; &nbsp; foo: str&nbsp; &nbsp; bar: Optional[str] = None&nbsp; &nbsp; qux: int = 100t = Test("foo")我已经测试过这在运行时适用于 Python 3.6 和 3.7,并使用 mypy 0.641 确认它按预期进行了类型检查。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python