我已经能够让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
我们可以有可选参数并避免出现此错误吗?
答案 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进行了预期的类型检查。