Pythonオブジェクト向け-列挙タイプenum

6131 ワード

列挙タイプ:実際の問題では、いくつかの変数の値が限られた範囲に限定されています.例えば、1週間に7日しかなく、1年に12ヶ月しかなく、1つのクラスには毎週6つの授業があります.これらの量を整数、文字列、または他のタイプとして説明すると、明らかに不適切です.プログラミング業界は、列挙と呼ばれるタイプを提供しています.列挙タイプ定義には、すべての可能な値が列挙され、その列挙タイプの変数の値範囲が定義された範囲を超えてはならないと説明される.列挙は、基本タイプに分解できないため、基本的なデータ型です.
pythonでは、列挙タイプに対してclassタイプが一般的に定義され、各定数はclassの唯一のインスタンスです.Enumクラスはこの機能を実現しました.
>>> from enum import Enum
>>> Month = Enum('Month',('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'))
>>> for name,member in Month.__members__.items():
...     print(name,',',member,',',member.value)
...
Jan , Month.Jan , 1
Feb , Month.Feb , 2
Mar , Month.Mar , 3
Apr , Month.Apr , 4
May , Month.May , 5
Jun , Month.Jun , 6
Jul , Month.Jul , 7
Aug , Month.Aug , 8
Sep , Month.Sep , 9
Oct , Month.Oct , 10
Nov , Month.Nov , 11
Dec , Month.Dec , 12

上記では、Monthタイプの列挙クラスを定義し、そのすべてのメンバーを列挙します.ここでvalueプロパティは、メンバーに自動的に付与されるint型定数で、デフォルトは1からです.
列挙タイプをより正確に制御する必要がある場合は、Enumからカスタムクラスを派生させ、@unique装飾器を使用して重複値があるかどうかを確認します.
>>> from enum import Enum,unique
>>> @unique
... class Weekday(Enum):
...     Sun = 0
...     Mon = 1
...     Tue = 2
...     Wed = 3
...     Thu = 4
...     Fri = 5
...     Sat = 6
...
>>> day1  = Weekday.Mon
>>> day1

>>> print(day1)
Weekday.Mon
>>> print(Weekday.Tue)
Weekday.Tue
>>> print(Weekday['Tue'])
Weekday.Tue
>>> print(Weekday.Tue.value)
2
>>> day1 == Weekday.Mon
True
>>> Weekday(1)

>>> Weekday(3)

>>> for name,member in Weekday.__members__.items():
...     print(name,':',member)
...
Sun : Weekday.Sun
Mon : Weekday.Mon
Tue : Weekday.Tue
Wed : Weekday.Wed
Thu : Weekday.Thu
Fri : Weekday.Fri
Sat : Weekday.Sat