Is it possible to define enums without values with Python?

Viewed 6473

One advantage of enums in Java and other languages is that I do not have to care about specific values (in contrast to constants/static final members). For example, in Java I can do the following:

public enum Color {
    RED, BLUE;
}

At least to my knowledge, in python I have to do the following:

class Color(Enum) {
    RED = "red" # or e.g 1
    BLUE = "blue" # or e.g. 2
}

If I have an enum with hundreds of names, then this can get quite cumbersome, because I always have to keep track whether a value was already assigned to a name or not. Is it maybe possible to achieve the same result as in Java without resorting to generators or the like?

2 Answers

If you're using Python 3.6 or later, you can use enum.auto():

from enum import Enum, auto

class Color(Enum):
    RED = auto()
    BLUE = auto()

The documentation for the enum library describes this and other useful features like the @unique decorator.

One way is to use the Enum base class as a callable:

Color = Enum('Color', 'RED BLUE GREEN ORANGE')
Related