【问题标题】:How to assert types in python3 dataclasses? [duplicate]如何在 python3 数据类中断言类型? [复制]
【发布时间】:2019-04-01 15:44:58
【问题描述】:

我正在使用Python3 的新dataclass 功能,它允许指定类字段的类型。在这个例子中,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))

【问题讨论】:

  • 我为此创建了一个小型 Python 库:github.com/tamuhey/dataclass_utils 这个库可以应用于包含另一个数据类(嵌套数据类)和嵌套容器类型(如 Tuple[List[Dict...)的数据类跨度>

标签: python python-3.x python-dataclasses


【解决方案1】:

数据类使用type hints,在运行时不检查。可以使用mypy等静态类型分析工具进行检查。

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

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

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

【讨论】:

    猜你喜欢
    • 2020-10-15
    • 1970-01-01
    • 1970-01-01
    • 2023-01-07
    • 2012-09-23
    • 1970-01-01
    • 2022-07-23
    • 2023-04-03
    相关资源
    最近更新 更多