Python/enum

From Omnia
Revision as of 19:58, 16 September 2025 by Kenneth (talk | contribs) (Created page with "== enum — Support for enumerations == Python 3: enum — Support for enumerations https://docs.python.org/3/library/enum.html <pre> from enum import Enum # class syntax class Color(Enum): RED = 1 GREEN = 2 BLUE = 3 # functional syntax Color = Enum('Color', ['RED', 'GREEN', 'BLUE']) </pre> Convert string name or value to enum: <pre> def value_to_enum(color_value_str): try: return Color(color_value_str) except ValueError: retu...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

enum — Support for enumerations

Python 3: 
enum — Support for enumerations
https://docs.python.org/3/library/enum.html
from enum import Enum

# class syntax
class Color(Enum):
    RED = 1
    GREEN = 2
    BLUE = 3

# functional syntax
Color = Enum('Color', ['RED', 'GREEN', 'BLUE'])

Convert string name or value to enum:

def value_to_enum(color_value_str):
    try:
        return Color(color_value_str)
    except ValueError:
        return None

def name_to_enum(color_name_str):
    try:
        return return Color[color_name_str]
    except ValueError:
        return None

---

Python 2: [1]

class Enum(set):
    """ Basic enumerated type
    
    Example
        >>> Animals = phi.Enum(["DOG", "CAT", "HORSE"])
        >>> Animals.DOG
        'DOG'
        >>> 'HORSE' in Animals
        True
    """
    def __getattr__(self, name):
        if name in self:
            return name
        raise AttributeError("Missing Enum property: %s" % name)
    def __setattr__(self, name, value):  # this makes it read-only
        raise AttributeError("Unable to modify Enum property: %s (%s)" % (name, value))

Animals = Enum(["DOG", "CAT", "HORSE"])

print(Animals.DOG)  # 'DOG'



Alternative:

class Stationery:
    Pen, Pencil, Eraser = range(0, 3)

One liner:

class Enum(tuple): __getattr__ = tuple.index
>>> State = Enum(['Unclaimed', 'Claimed'])
>>> State.Claimed
1
>>> State[1]
'Claimed'
>>> State
('Unclaimed', 'Claimed')
>>> range(len(State))
[0, 1]
>>> [(k, State[k]) for k in range(len(State))]
[(0, 'Unclaimed'), (1, 'Claimed')]
>>> [(k, getattr(State, k)) for k in State]
[('Unclaimed', 0), ('Claimed', 1)]

Python 3 supports enum natively with the enum.Enum library: