python - 特定 Enum 值的类型注释

标签 python python-3.x enums type-hinting python-typing

Python 中有没有办法获取特定枚举值(而不是整个枚举)的类型注释?例如,以下代码尝试使用 Binary.One 的类型注释,它是 Binary 的子类型:

from enum import Enum, auto
from typing import TypeVar, Generic

class Binary(Enum):
    One = auto()
    Two = auto()

B = TypeVar('B', bound=Binary)

class Foo(Generic[B]):
    pass

F = TypeVar('F', bound=Foo[Binary.One])

但是,它会引发以下警告:

Expected type 'Optional[type]', got 'Binary' instead

最佳答案

您使用的类型变量是错误的。

B = TypeVar('B',bound=Binary) 是一个类型变量,仅限于 Binary 及其子类型,而不是 Binary 的实例。 (毕竟,它是一个 type 变量,而 Binary.One 不是类型。)您无法创建 Binary 的子类,所以 B 可以做的事情并不多。它基本上仅限于 Binary 和运行时不是“真实”类型的静态类型,例如 Any 或文字类型。

typing 当前不提供创建以枚举值作为参数的泛型类的方法。 可以使用类型typing.Literal[Binary.One],该类型的唯一实例是Binary.One,并且然后将其用作类型参数:

Foo[Literal[Binary.One]]

关于python - 特定 Enum 值的类型注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63332993/

相关文章:

python - 如何线程 Tweepy 流

c++ - 如何根据 C++ 中文件的输入为枚举赋值?

swift - 将 "or"逻辑与多个 "if case"语句一起使用

python - 使用 .split 隔离 Python 中未定义的关键字

python - 如何抵消 Pandas Pearson 与日期时间索引的相关性

python timeit 没有在设置代码中初始化列表

python - Tkinter 干扰 OSX 上的 pygame(中止陷阱 6)

java - ClassLoad 一个 Enum 类型

python - git 文件夹下载实用程序与 python?

javascript - 比较 Algolia 查询在多个索引中的排名