使用具有默认值的 NamedTuples 时如何忽略 mypy 错误
How to ignore mypy errors when using NamedTuples with default values
我已经能够让 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")
时,出现以下错误消息
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 确认它按预期进行类型检查。
我已经能够让 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")
时,出现以下错误消息
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 确认它按预期进行类型检查。