我正在使用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))
答案 0 :(得分:2)
数据类使用type hints,运行时不检查它们。可以使用诸如mypy
之类的静态类型分析工具来检查它们。
数据类无意提供运行时类型检查的字段。您只需要为生成的类定义字段,类型提示语法就可以轻松做到这一点,并且还提供类型提示。
如果仅使用类型提示而不使用类型检查器工具(例如mypy),则至少现在记录了预期的类型。另外,某些Python IDE(例如PyCharm和WingIDE)可以提供带有此信息的更智能的自动完成提示。
即使在技术上您可以实现此类功能,我也不会尝试在运行时强制执行类型提示。您真的不想测试列表中的每个元素 来查看它们是否不是整数。那只是浪费CPU时间,实际上,您只想编写不会产生这种无效列表的代码。静态类型检查旨在为您提供后者,而不会增加运行时成本。