Преобразовать перечисление в список в Python - PullRequest
0 голосов
/ 09 января 2019

У меня есть перечисление, которое я определяю так:

def make_enum(**enums):
    return type('Enum', (), enums)

an_enum = make_enum(first=1, second=2)

Позже я хотел бы проверить, является ли значение, которое я принял в качестве параметра в функции, частью an_enum. Обычно я делаю это так

assert 1 in to_list(an_enum)

Как я могу преобразовать объект enum an_enum в список? Если это невозможно, как я могу проверить, является ли значение «частью перечисления»?

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Я не уверен, почему вы определяете перечисления, как вы, есть поддерживаемый функциональный способ сделать это:

en_enum = Enum('Numbers', {'first': 1, 'second': 2})

Если это соответствует вашим потребностям, вы можете сделать

>>> en_enum(1)
<Numbers.first: 1>

>>> en_enum(3)
ValueError: 3 is not a valid Numbers

на самом деле не проверка членства, но вам не нужны никакие специальные методы / преобразователи

0 голосов
/ 09 января 2019

Как я могу преобразовать объект enum an_enum в список?

>>> [name for name in dir(an_enum) if not name.startswith('_')]
['first', 'second']

Как я могу проверить, является ли значение "частью перечисления"?

>>> getattr(an_enum, 'first')
1
>>> getattr(an_enum, '1')
Traceback [...] 
AttributeError: type object 'Enum' has no attribute '1'
...