【问题标题】:typing: Define a type that can only be certain strings?打字:定义一个只能是某些字符串的类型?
【发布时间】:2018-04-15 10:55:34
【问题描述】:

如何使用 typing 模块来创建可以是特定字符串的类型?

例如假设我需要一个类型CondOperator,它可以是这些字符串中的任何一个:

['=', '>', '<', '>=', '<=', '<>', '!=']

我希望有CondOperator = String['=', '&gt;', '&lt;', '&gt;=', '&lt;=', '&lt;&gt;', '!='],但typing 中没有String。所以这行不通。

如何定义这样的类型?

【问题讨论】:

  • typing 是错误的工具。您正在尝试检查字符串的 value,而不是 type。如果您想要类型安全,请使用枚举。

标签: python python-3.x typing


【解决方案1】:

Python 3.8 在typing 中引入了Literal 类型。它也可以通过以前版本的 Python 中的 typing_extensions 包访问。使用Literal,您可以将类型定义为:

from typing import Literal

CondOperator = Literal['=', '>', '<', '>=', '<=', '<>', '!=']

Literal 上的 mypy docs 值得一读。

【讨论】:

  • @user2357112supportsMonica 好吧,您可以通过将x 显式标记为文字(x: CondOperator = '&gt;'x: Literal['&gt;'] = '&gt;')或将其标记为最终版本(x: Final = '&gt;')来强制其为文字。无论哪种方式,它都会检查您是否将x 提供给接受CondOperator 的函数。
  • @user2357112 我不认为这是正确的 - 文档清楚地显示了文字变量和函数参数是这样输入的。
猜你喜欢
  • 2010-12-09
  • 2021-08-20
  • 1970-01-01
  • 2021-08-10
  • 1970-01-01
  • 1970-01-01
  • 2014-06-02
  • 1970-01-01
相关资源
最近更新 更多