2

我正在使用允许指定类字段的类型的新dataclass功能。Python3在这个例子中,field2 应该是 List[int] 类型,我将 List[str] 传递给它。这段代码运行没有失败,我想知道如果将错误的类型传递给类,是否有(自动)方法使代码失败(即使用断言等)。

from dataclasses import *
import typing
@dataclass
class C:
    field1: str
    field2: typing.List[int]

if __name__ == '__main__':
    x = C('a',['a','b'])
    print(repr(x))
4

1 回答 1

3

数据类使用类型提示,在运行时不检查。可以使用静态类型分析工具(例如mypy.

数据类不旨在提供运行时类型检查字段。您只是为生成的类定义字段,类型提示语法使这样做很容易,并且提供类型提示。

如果您只使用类型提示而不使用诸如 mypy 之类的类型检查器工具,那么您至少现在记录了预期的类型。此外,一些 Python IDE(例如 PyCharm 和 WingIDE)可以提供更智能的自动完成提示以及此信息。

我不会尝试在运行时强制执行类型提示,即使从技术上讲你可以实现这样的功能。您真的不想测试列表中的每个元素以查看它们是否不是整数。这只是浪费 CPU 时间,你真的只想编写一开始就不会产生这样一个无效列表的代码。静态类型检查旨在为您提供后者而无需运行时成本。

于 2018-10-28T15:30:56.743 回答