
今回はenum型について。
列挙型を使うと、定数値に名前を定義でき、かつ値とマッピングができるので、かなり便利。
Pythonでもそれは使えます。
>>> import enum
>>> class Prefectures(enum.Enum):
... HOKKAIDO = 1
... AOMORI = 2
... IWATE = 3
... AKITA = 4
... MIYAGI = 5
... YAMAGATA = 6
... FUKUSHIMA = 7
...
>>>
enumの定義は、class定義として、要素はインデントをつけて順番に定義すればOK。
これで定義完了です。
enumの中身を見たければ、listで出力可能。
>>> list(Prefectures)
[<Prefectures.HOKKAIDO: 1>, <Prefectures.AOMORI: 2>, <Prefectures.IWATE: 3>, <Prefectures.AKITA: 4>, <Prefectures.MIYAGI: 5>, <Prefectures.YAMAGATA: 6>, <Prefectures.FUKUSHIMA: 7>]
そして、各要素の値も表示できますし、以下の属性、
を取得できます。
>>> Prefectures.AOMORI
<Prefectures.AOMORI: 2>
>>>
>>> miyagi = Prefectures.MIYAGI
>>> miyagi.name
'MIYAGI'
>>> miyagi.value
5
ちなみに、連番を振る場合は、enum.auto() という関数を利用することで、簡単に設定できるようです。
>>> import enum
>>> class Prefectures2(enum.Enum):
... FUKUOKA = enum.auto()
... NAGASAKI = enum.auto()
... SAGA = enum.auto()
... KUMAMOTO = enum.auto()
... OOITA = enum.auto()
... MIYAZAKI = enum.auto()
... KAGOSHIMA = enum.auto()
... OKINAWA = enum.auto()
...
>>> list(Prefectures2)
[<Prefectures2.FUKUOKA: 1>, <Prefectures2.NAGASAKI: 2>, <Prefectures2.SAGA: 3>, <Prefectures2.KUMAMOTO: 4>, <Prefectures2.OOITA: 5>, <Prefectures2.MIYAZAKI: 6>, <Prefectures2.KAGOSHIMA: 7>, <Prefectures2.OKINAWA: 8>]
>>>
>>> Prefectures2.KAGOSHIMA.name
'KAGOSHIMA'
>>> Prefectures2.KAGOSHIMA.value
7
これは普通に便利なので、覚えておいて損はないですね。