Подтвердить что ты не робот

Как получить все значения из класса enum python?

Я использую библиотеку Enum4 для создания класса перечисления следующим образом:

class Color(Enum):
    RED = 1
    BLUE = 2

Я хочу напечатать [1, 2] как список где-нибудь. Как я могу достичь этого?

4b9b3361

Ответ 1

Вы можете использовать IntEnum:

from enum import IntEnum

class Color(IntEnum):
   RED = 1
   BLUE = 2


print(int(Color.RED))   # prints 1

Чтобы получить список ints:

enum_list = list(map(int, Color))
print(enum_list) # prints [1, 2]

Ответ 2

Вы можете сделать следующее:

[e.value for e in Color]

Ответ 3

Чтобы использовать Enum с любым типом значения, попробуйте следующее:
Обновлено с некоторыми улучшениями... Спасибо @Jeff, на ваш совет!

from enum import Enum

class Color(Enum):
    RED = 1
    GREEN = 'GREEN'
    BLUE = ('blue', '#0000ff')

    @staticmethod
    def list():
        return list(map(lambda c: c.value, Color))

print(Color.list())

В результате:

[1, 'GREEN', ('blue', '#0000ff')]

Ответ 4

Итак, Enum имеет __members__ dict. Решение, предлагаемое @ozgur, действительно является лучшим, но вы можете сделать это, что делает то же самое, с большей работой

[color.value for color_name, color in Color.__members__.items()]

Словарь __members__ может пригодиться, если вы хотите динамически вставлять материал в него... в какой-то сумасшедшей ситуации.

[EDIT] По-видимому __members__ не словарь, а прокси-сервер. Это означает, что вы не можете легко добавлять к нему элементы.

Вы можете, однако, сделать такие странные вещи, как MyEnum.__dict__['_member_map_']['new_key'] = 'new_value', а затем вы можете использовать новый ключ, например MyEnum.new_key.... но это всего лишь деталь реализации, и его не следует воспроизводить. Черная магия оплачивается с огромными расходами на техническое обслуживание.