【问题标题】:python - Manually execute typing constraints using typing classespython - 使用打字类手动执行打字约束
【发布时间】:2019-01-25 06:13:38
【问题描述】:

我想验证某个参数的类型,最好使用typing 定义

例如:

from typing import List, Dict

def func(param1, param2):
     assert param1 is of type Dict[str, int] # How can this be done?
     assert param2 is of type List[Any] # How can this be done?

对于非复杂类型来说很容易。 assert isinstance(param1, str)

问题明显简化了,说清楚了

【问题讨论】:

  • typing 模块似乎只用于类型提示 - 实际上没有强制执行。
  • 是的,我明白了。我想知道是否还有一些方法可以使用它
  • 由于 python 列表和字典不限于单一类型,您必须枚举集合并检查每个元素。

标签: python-3.x typing


【解决方案1】:

您可以使用 enforcetypeguard 等库在运行时强制执行类型注释。

【讨论】:

    【解决方案2】:

    根据typing,这只是为了使类型提示更具可读性,Python 实际上并没有强制执行类型检查。

    由于列表和字典可能包含任意类型(对于字典,它们必须是可散列的 - 但仍然“几乎是任意的”),这样做的唯一方法是遍历集合并检查每一项。

    assert isinstance(param1, dict)
    for k, v in param1.items():
        assert isinstance(k, str)
        assert isinstance(v, int)
    

    【讨论】:

      猜你喜欢
      • 2021-11-08
      • 2021-11-06
      • 2020-07-29
      • 2021-10-04
      • 2021-04-20
      • 2019-09-23
      • 1970-01-01
      • 2018-03-12
      • 2018-09-17
      相关资源
      最近更新 更多