Преобразовать строку в перечисление в метаклассе и ввести подсказкиPython

Программы на Python
Anonymous
Преобразовать строку в перечисление в метаклассе и ввести подсказки

Сообщение Anonymous »

У меня много Enum и EnumMeta, например
class MyEnumMeta(EnumMeta):
def from_string(cls, s: str) -> Enum:
return cls[s.upper()]

class A(IntEnum, metaclass=MyEnumMeta):
ONE = 1
TWO = 2
...

class B(Enum, metaclass=MyEnumMeta):
BB = auto()
...

...

Если я проведу следующее сравнение,
A.from_string('TWO') > A.ONE

Я получаю следующее сообщение mypy:
Неподдерживаемые типы операндов для < («A» и «Enum»)
Как я могу исправить проблему несовместимых типов? Я не хочу определять метод from_string в каждом классе и указывать соответствующий класс в качестве возвращаемого значения.
Я определил метод в каждом классе и указал соответствующий класс в качестве возвращаемого значения. .
class A(IntEnum):
ONE = 1
TWO = 2
...

@classmethod
def from_string(cls, s: str) -> 'A':
return cls[s.upper()]

class B(Enum):
BB = auto()

@classmethod
def from_string(cls, s: str) -> 'B':
return cls[s.upper()]


Подробнее здесь: https://stackoverflow.com/questions/781 ... type-hints

Вернуться в «Python»