PythonでEnumを書いてみた。

とても車輪の再発明な気もしますが、勉強の意味の含めて自分で実装してみました。と、言っても大したものではないですけど。Enumと言っても C言語的なものではなく、JavaでのEnumを意識してます。

Enumクラスの実装はこんな感じ。
enum.py

# -*- coding: utf-8 -*-
class Enum(object):
    @classmethod
    def values(cls):
        if hasattr(cls, '_values'):
            return cls._values
        else:
            return [elm for elm in
                map(lambda x: getattr(cls, x), dir(cls))
                if type(elm) == cls]
    @classmethod
    def create(cls, names, values):
        cls._values = []
        for name, value in zip(names, values):
            inst = cls(*value)
            setattr(cls, name, inst)
            cls._values.append(inst)

Enumの定義は、このクラスを継承して以下のようなクラスを書きます。
sample_enum.py

# -*- coding: utf-8 -*-
from enum import Enum

class SampleEnum(Enum):
    def __init__(self, value):
        self.value = value

SampleEnum.create(
    (
        'A', 'B', 'C', 'D', 'E',
    ),
    (
        map(lambda i: [i], range(0, 5))
    )
)

使う時は、こんな感じで。

from sample_enum import SampleEnum

print SampleEnum.A
print SampleEnum.C.value

e = SampleEnum.B
if e == SampleEnum.E:
    print 'false'
elif e == SampleEnum.B:
    print 'true'