特定Enum值的类型注释

时间:2020-08-10 01:29:10

标签: python python-3.x enums typing 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

1 个答案:

答案 0 :(得分:0)

您使用的类型变量错误。

app-root是一个类型变量,仅限于Binary及其子类型,而不限于Binary的实例。 (毕竟,这是一个 type 变量,而B = TypeVar('B', bound=Binary)不是一种类型。)您不能创建Binary.One的子类,因此没有很多Binary是可以的。它基本上仅限于B和运行时不是“真实”类型的静态类型内容,例如Binary或文字类型。

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

Binary.One