Skip to content
Advertisement

Linking python enums

I have some Enum classes that I want to link up recursively. Looking at the line color = ItemColors[Items(value)._name_].value.value, it seems a bit clunky. Am I misunderstanding something about Enum usage? Is there a better way to do it?

class Colors(Enum):
    white = (255, 255, 255)
    black = (0, 0, 0)
    red = (255, 0, 0)
    green = (0, 255, 0)
    blue = (0, 0, 255)
    yellow = (255, 255, 0)


class ItemColors(Enum):
    empty = Colors.white
    food = Colors.green
    poison = Colors.red
    agent = Colors.blue


class Items(Enum):
    empty = 0
    food = 1
    poison = 2
    agent = 3

items = [0, 0, 3, 2]


def get_item_color(item):
    color = ItemColors[Items(item)._name_].value.value
    return color

Advertisement

Answer

Building on @brni’s answer, I came up with a smoother solution:

class Colors(Enum):
    white = (255, 255, 255)
    black = (0, 0, 0)
    red = (255, 0, 0)
    green = (0, 255, 0)
    blue = (0, 0, 255)
    yellow = (255, 255, 0)


class Items(Enum):
    empty = 0
    food = 1
    poison = 2
    agent = 3

item_colors = {
    Items.empty: Colors.white,
    Items.food: Colors.green,
    Items.poison: Colors.red,
    Items.agent: Colors.blue
}

items = [0, 0, 3, 2]


def get_item_color(item):
    color = item_colors[Items(item)].value
    return color

for item in items:
    print(get_item_color(item))
User contributions licensed under: CC BY-SA
6 People found this is helpful
Advertisement