method __contain__ в классе Enum.
Но возникает Exception описанный на 24-25 строках.
Также пробовал через __order__ но это не для таких сценариев на сколько я понял.
Может кто подсказать как реализовать класс чтобы он работал для not in?
from enum import Enum, EnumMeta class MyMeta(EnumMeta): def __contains__(self, other) -> bool: try: self(other) except ValueError: return False else: return True class Foo(str, Enum, metaclass=MyMeta): A = "A" B = "B" C = "C" print("A" in Foo) print("AB" in Foo)
Но зачем?
Пишу сервис и мне могут прислать условный TRY вместо тех values что в Enum. Проверяю входят ли они в Enum.
CurrencyIn("TRY") кинет ValueError
"TRY" это строка (очевидно), а енум содержит инстансы этого енума, поэтому contains не сработает. самый простой вариант это сделать "TRY" in {item.value for item in Currency}
А не проще сделать CurrencyIn("TRY")?
вдруг у человека аллергия на try:..except ) но да, это по идее легче. В python3.11 добавляется StrEnum, кстати, с ним возможно прокатит и "TRY" in Currency
Да он там кидает ValueError
Обсуждают сегодня