Я использую библиотеку Enum4 для создания класса перечисления следующим образом:
class Color(Enum):
RED = 1
BLUE = 2
Я хочу напечатать [1, 2]
как список где-нибудь. Как я могу достичь этого?
Я использую библиотеку Enum4 для создания класса перечисления следующим образом:
class Color(Enum):
RED = 1
BLUE = 2
Я хочу напечатать [1, 2]
как список где-нибудь. Как я могу достичь этого?
Вы можете использовать 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]
Вы можете сделать следующее:
[e.value for e in Color]
Чтобы использовать 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')]
Итак, 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
.... но это всего лишь деталь реализации, и его не следует воспроизводить. Черная магия оплачивается с огромными расходами на техническое обслуживание.