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/