typing: 定义一个只能是某些字符串的类型?

typing: Define a type that can only be certain strings?

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

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

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

我希望 CondOperator = String['=', '>', '<', '>=', '<=', '<>', '!='],但 typing 中没有 String。所以这行不通。

如何定义这样的类型?

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

from typing import Literal

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

Literal 上的 mypy docs 值得一读。