Python 3.4: random.choice on Enum

Я хотел бы использовать random.choice в Enum.

Я пробовал:

class Foo(Enum):
    a = 0
    b = 1
    c = 2
bar = random.choice(Foo)

Но этот код не работает, как я могу это сделать?

Ответ 1

An Enum не является последовательностью, поэтому вы не можете передать его в random.choice(), который пытается выбрать индекс между 0 и len(Foo). Как и словарь, индексный доступ к Enum вместо этого ожидает, что имена перечислений будут переданы, поэтому Foo[<integer>] здесь не работает с KeyError.

Сначала вы можете перенести его в список:

bar = random.choice(list(Foo))

Это работает, потому что Enum поддерживает итерацию.

Демо:

>>> from enum import Enum
>>> import random
>>> class Foo(Enum):
...     a = 0
...     b = 1
...     c = 2
... 
>>> random.choice(list(Foo))
<Foo.a: 0>