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
答案 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