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'