【问题标题】:Where are the Type annotation constraints (`ValueRange`/`MinLen` etc) in python 3.9?python 3.9 中的类型注释约束(`ValueRange`/`MinLen` 等)在哪里?
【发布时间】:2021-07-23 18:30:20
【问题描述】:

在 python 3.9 中看到(很棒的)新的 Annotated 类型注释(可变类型约束!)后,我急忙升级,以便检查它们。 (https://docs.python.org/3/library/typing.html?highlight=valuerange)

但是当我尝试使用 ValueRange[min,max] 或 MaxLen[n] 时 - 我似乎无法在任何地方找到它们.. PyCharm 没有为我提供任何帮助,而且它们似乎不在我所期望的 typing 模块中。

文档以它们为特色,但我在网上找不到任何关于如何实际导入它们的参考。

他们还没有使用该语言吗?还是只是在一些我不知道的新模块中?

【问题讨论】:

  • ValueRange 不只是一个例子吗?它只出现在这种情况下,它本身并没有记录在案。
  • 你可能是对的。我找不到任何示例声明,因此假设它是 stdlib 中的内容。那么约束是动态的吗?如果是这样,我将如何自己声明这些?或者,我如何以其他方式注释对列表大小/值的约束?
  • 例子的重点是它没有定义,第二个参数是元数据,在没有具体逻辑的情况下被忽略。
  • 好吧,我也很兴奋。看到一个 ValueRange 实现的例子会很酷。
  • 完整的示例解决方案已发布在this other question。

标签: python python-3.x types


【解决方案1】:

正如其他人所说,这些类只是可以注释的示例。注释只是抓取某个变量并通过您创建的类(MaxLen、ValueRange 等)向它们添加一些“提示”。

然后,您可以使用get_type_hints 获取与每个参数相关的“提示”,并逐个抓取具有命中的参数并进行所需的检查(不是注释的意图,尽管我也找到了它有趣的)。你有一个full example in this other post。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    • 2015-02-06
    • 1970-01-01
    • 1970-01-01
    • 2016-08-25
    • 1970-01-01
    相关资源
    最近更新 更多