PythonでEnumを書いてみた。
とても車輪の再発明な気もしますが、勉強の意味の含めて自分で実装してみました。と、言っても大したものではないですけど。Enumと言っても C言語的なものではなく、JavaでのEnumを意識してます。
# -*- 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'