python - 如何在 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))
解决方案
数据类使用类型提示,在运行时不检查。可以使用静态类型分析工具(例如mypy
.
数据类不旨在提供运行时类型检查字段。您只是为生成的类定义字段,类型提示语法使这样做很容易,并且还提供类型提示。
如果您只使用类型提示而不使用诸如 mypy 之类的类型检查器工具,那么您至少现在记录了预期的类型。此外,一些 Python IDE(例如 PyCharm 和 WingIDE)可以提供更智能的自动完成提示以及此信息。
我不会尝试在运行时强制执行类型提示,即使从技术上讲你可以实现这样的功能。您真的不想测试列表中的每个元素以查看它们是否不是整数。这只是浪费 CPU 时间,你真的只想编写一开始就不会产生这样一个无效列表的代码。静态类型检查旨在为您提供后者而无需运行时成本。
推荐阅读
- python - 如何以 10 个字符的行显示字符串
- c - 当使用 write() 作为参数时,来自 printf 的数据被写入文件
- linux - 在 Kubernetes 的工作节点之间共享存储?
- cakephp - CakeDC 用户插件未读取 permissions.php
- javascript - 在 Adobe 表单填写中通过 JavaScript 计算的小数小时数错误
- php - 为什么 PHP 标头重定向在移动设备上不起作用
- flutter - Flutter:只有部分阴影的材质
- python - Python 面向对象
- java - Java 实例化类从 Method 对象调用(Java 反射)
- .net - CLR 在 .Net Framework 和 .Net Core 中是否具有相同的行为?