首页 > 解决方案 > 如何在 python3 数据类中断言类型?

问题描述

我正在使用允许指定类字段的类型的新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))

标签: pythonpython-3.xpython-dataclasses

解决方案


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

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

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

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


推荐阅读