Python 键入返回枚举成员的提示Enum@classmethod

Python 键入返回枚举成员的提示Enum@classmethod,python,enums,type-hinting,mypy,Python,Enums,Type Hinting,Mypy,我已经编写了一个带有几个成员的enum.enum类型。现在我想编写一个“选择器”@classmethod,它将根据参数返回Enum的一个成员,我不知道如何正确地键入hint 以下是我要做的: 从枚举导入枚举,自动 从输入importtypevar,输入 _StringSizeT=TypeVar(“\u StringSizeT”,bound=“StringSize”) 类StringSize(枚举): 小=自动() 大=自动() @类方法 来自\u字符串的定义(cls:Type[\u String

我已经编写了一个带有几个成员的
enum.enum
类型。现在我想编写一个“选择器”
@classmethod
,它将根据参数返回
Enum
的一个成员,我不知道如何正确地键入hint

以下是我要做的:

从枚举导入枚举,自动
从输入importtypevar,输入
_StringSizeT=TypeVar(“\u StringSizeT”,bound=“StringSize”)
类StringSize(枚举):
小=自动()
大=自动()
@类方法
来自\u字符串的定义(cls:Type[\u StringSizeT],source\u字符串:str)->\u StringSizeT:
n_chars=len(源字符串)

如果n_chars Note,您可以使用
StringSize
作为注释。如果您使用的是早期版本,请使用来自未来导入注释的
“这有点让人困惑,因为我没有返回实例”,是的。尝试
isinstance(StringSize.BIG,StringSize)
@juanpa.arrivillaga lighting!我曾经看到过关于使用未来导入的建议,但始终不明白为什么。如果不是评论,我会接受这个回答。关于这个例子,是的,你是对的。这让我很困惑,因为在几乎所有其他情况下,以这种方式表示的类属性都不是该类的实例。如果有的话,您可以假设它是
auto()
的任何类型。
enum
的全部要点是允许您创建一个类,定义该类的离散数量的单例实例。我想,它使用了一点元编程的魔力,让您可以使用这种简单的语法。这是为了避免以前存在的情况,它只是一个具有一系列整数类属性的类对象。@juanpa.arrivillaga:您的假设是正确的。:-)
error: Incompatible return value type (got "StringSize", expected "_StringSizeT")