# Enums

An `Enum` is a special `GraphQL` type that represents a set of symbolic names (members) bound to unique, constant values.

## Definition

You can create an `Enum` using classes:

    import graphene

    class Episode(graphene.Enum):
        NEWHOPE = 4
        EMPIRE = 5
        JEDI = 6

But also using instances of Enum:

    Episode = graphene.Enum('Episode', [('NEWHOPE', 4), ('EMPIRE', 5), ('JEDI', 6)])

## Value descriptions

It’s possible to add a description to an enum value, for that the enum value needs to have the `description` property on it.

    class Episode(graphene.Enum):
        NEWHOPE = 4
        EMPIRE = 5
        JEDI = 6

        @property
        def description(self):
            if self == Episode.NEWHOPE:
                return 'New Hope Episode'
            return 'Other episode'

## Usage with Python Enums

In case the Enums are already defined it’s possible to reuse them using the `Enum.from_enum` function.

    graphene.Enum.from_enum(AlreadyExistingPyEnum)

`Enum.from_enum` supports a `description` and `deprecation_reason` lambdas as input so you can add description etc. to your enum without changing the original:

    graphene.Enum.from_enum(
        AlreadyExistingPyEnum,
        description=lambda v: return 'foo' if v == AlreadyExistingPyEnum.Foo else 'bar')

## Notes

`graphene.Enum` uses `enum.Enum` internally (or a backport if that’s not available) and can be used in a similar way, with the exception of member getters.

In the Python `Enum` implementation you can access a member by initing the Enum.

    from enum import Enum
    class Color(Enum):
        RED = 1
        GREEN = 2
        BLUE = 3

    assert Color(1) == Color.RED

However, in Graphene `Enum` you need to call get to have the same effect:

    from graphene import Enum
    class Color(Enum):
        RED = 1
        GREEN = 2
        BLUE = 3

    assert Color.get(1) == Color.RED