enum --- 列挙型のサポート¶
Added in version 3.4.
ソースコード: Lib/enum.py
列挙型とは:
一意の値に紐付けられたシンボリックな名前の集合です
反復可能であり、定義順にその正規の(エイリアスでない)メンバーを返します
値を渡してメンバーを返すために、 呼び出し 構文を使用します
名前を受け取ってメンバーを返すために、 インデックス 構文を使用します
列挙型は、class 構文を使用するか、関数呼び出し構文を使用して作成されます:
>>> from enum import Enum
>>> # class 構文
>>> class Color(Enum):
... RED = 1
... GREEN = 2
... BLUE = 3
>>> # 関数呼び出し構文
>>> Color = Enum('Color', [('RED', 1), ('GREEN', 2), ('BLUE', 3)])
Enum の作成に class 文を使用できるものの、Enum は通常の Python クラスではありません。詳細は Enum はどう違うのか? を参照してください。
注釈
用語
クラス
Colorは 列挙型 (または Enum) です属性
Color.RED,Color.GREENなどは 列挙型のメンバー (または メンバー) で、機能的には定数です。列挙型のメンバーは 名前 と 値 を持ちます (
Color.REDの名前はRED、Color.BLUEの値は3など。)
モジュールの内容¶
Enumおよびそのサブクラスのための
typeです。列挙型定数を作成する基底クラスです。
列挙型定数を作成する基底クラスで、ビット演算を使って組み合わせられ、その結果も
Flagメンバーになります。
CONTINUOUS、NAMED_FLAGS、UNIQUEの値を持つ列挙型です。verify()と共に使用して、指定された列挙型がさまざまな制約を満たしていることを確認します。An enumeration with the values
STRICT,CONFORM,EJECT, andKEEPwhich allows for more fine-grained control over how invalid values are dealt with in an enumeration.インスタンスは列挙型のメンバーに適切な値で置き換えられます。
StrEnumではデフォルトの値がメンバー名を小文字にしたものですが、その他の列挙型のデフォルトは1から連番で増加する値となります。メンバー名との競合を避けながら
Enumメンバーに属性を持たせます。value属性とname属性はこの方法で実装されます。一つの名前だけがひとつの値に束縛されていることを保証する Enum クラスのデコレーターです。
列挙型が、利用者の選択した制約を満たすか確認する Enum クラスのデコレータです。
objをメンバーにします。デコレータとして使用できます。
objをメンバーにしません。デコレータとして使用できます。フラグに含まれる、全ての2の累乗の整数のリストを返します。
組み込みの
bin()と似ていますが、負の値は 2 の補数で表し、先頭のビットは常に符号を示します (0は正、1は負を示します)。
Added in version 3.6: Flag, IntFlag, auto
Added in version 3.11: StrEnum, EnumCheck, ReprEnum, FlagBoundary, property, member, nonmember, global_enum, show_flag_values
Added in version 3.13: EnumDict
データ型¶
- class enum.EnumType¶
EnumType は enum 列挙型の メタクラス です。 EnumType のサブクラスを作成することが可能です -- 詳細は EnumTypeのサブクラスを作る を参照してください。
EnumTypeは、最終的な enum に正しい__repr__()、__str__()、__format__()、__reduce__()メソッドを設定します。 また、列挙型のメンバーの作成、重複の適切な処理、列挙型クラスの反復処理の提供なども担当します。Added in version 3.11: 3.11 より前は
EnumTypeはEnumMetaと呼ばれていました。 この名前は現在もエイリアスとして使えます。- __call__(cls, value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)¶
このメソッドは2つの異なる方法で呼び出されます。
既存のメンバーを検索する:
- cls:
呼び出されるenumクラス。
- value:
検索する値。
clsを使って新しい列挙型を作成する(既存の列挙型がメンバーを持たない場合のみ):
- __contains__(cls, member)¶
メンバーが
clsに属している場合はTrueを返します:>>> some_var = Color.RED >>> some_var in Color True >>> Color.RED.value in Color True
バージョン 3.12 で変更: Python 3.12 より前では、非Enumメンバーの包含判定が行われた場合、
TypeErrorが送出されます。
- __dir__(cls)¶
['__class__', '__doc__', '__members__', '__module__']と、 cls に属するメンバー名を返します:>>> dir(Color) ['BLUE', 'GREEN', 'RED', '__class__', '__contains__', '__doc__', '__getitem__', '__init_subclass__', '__iter__', '__len__', '__members__', '__module__', '__name__', '__qualname__']
- __getitem__(cls, name)¶
cls 内で name に一致する Enum メンバーを返します。 見つからなければ
KeyErrorを送出します。>>> Color['BLUE'] <Color.BLUE: 3>
- __iter__(cls)¶
cls 内の各メンバー を定義順に返します:
>>> list(Color) [<Color.RED: 1>, <Color.GREEN: 2>, <Color.BLUE: 3>]
- __len__(cls)¶
cls のメンバー数を返します。
>>> len(Color) 3
- __members__¶
エイリアスも含め、列挙型のすべての名前を対応するメンバーに結び付けるマッピングを返します。
- __reversed__(cls)¶
cls 内の各メンバー を定義順の逆順で返します:
>>> list(reversed(Color)) [<Color.BLUE: 3>, <Color.GREEN: 2>, <Color.RED: 1>]
- class enum.Enum¶
Enum は全ての enum 列挙型の基底クラスです。
- name¶
Enumメンバーを定義するために使用される名前:>>> Color.BLUE.name 'BLUE'
- _name_¶
メンバーの名前。
- _order_¶
No longer used, kept for backward compatibility. (class attribute, removed during class creation).
_order_属性を指定すると、Python 2 と Python 3 のコードを揃えておくのに役立ちます。 この属性を列挙型の実際の順序と照合し、一致しない場合はエラーを送出します。>>> class Color(Enum): ... _order_ = 'RED GREEN BLUE' ... RED = 1 ... BLUE = 3 ... GREEN = 2 ... Traceback (most recent call last): ... TypeError: member order does not match _order_: ['RED', 'BLUE', 'GREEN'] ['RED', 'GREEN', 'BLUE']
注釈
Python 2 では、記録する前に定義の順序が失われるため、
_order_属性が必要です。Added in version 3.6.
- _ignore_¶
_ignore_は列挙の作成中にのみ使用され、作成が完了すると削除されます。_ignore_は、メンバーにならず、作成された列挙から削除される名前のリストです。例については、TimePeriod を参照してください。Added in version 3.7.
- __dir__(self)¶
Returns
['__class__', '__doc__', '__module__', 'name', 'value']and any public methods defined on self.__class__:>>> from enum import Enum >>> import datetime as dt >>> class Weekday(Enum): ... MONDAY = 1 ... TUESDAY = 2 ... WEDNESDAY = 3 ... THURSDAY = 4 ... FRIDAY = 5 ... SATURDAY = 6 ... SUNDAY = 7 ... @classmethod ... def today(cls): ... print(f'today is {cls(dt.date.today().isoweekday()).name}') ... >>> dir(Weekday.SATURDAY) ['__class__', '__doc__', '__eq__', '__hash__', '__module__', 'name', 'today', 'value']
- _generate_next_value_(name, start, count, last_values)¶
- name:
定義されているメンバーの名前(例:'RED')。
- start:
Enumの開始値。デフォルトは1です。
- count:
定義済みのメンバーの数。現在のメンバーを含めない。
- last_values:
定義済みの値のリスト。
autoが次に返す値を決めるための staticmethod です。このメソッドはオーバーライドできます。 例えば次のようにします。
>>> from enum import auto, Enum >>> class PowersOfThree(Enum): ... @staticmethod ... def _generate_next_value_(name, start, count, last_values): ... return 3 ** (count + 1) ... FIRST = auto() ... SECOND = auto() ... >>> PowersOfThree.SECOND.value 9
Added in version 3.6.
バージョン 3.13 で変更: 以前のバージョンでは最大の値ではなく最後に定義された値を使っていました。
- __init__(self, *args, **kwds)¶
デフォルトでは何もしません。メンバーに複数の値が指定されている場合、それらの値は
__init__の別々の引数となります。例えば、>>> from enum import Enum >>> class Weekday(Enum): ... MONDAY = 1, 'Mon'
Weekday.__init__()はWeekday.__init__(self, 1, 'Mon')として呼び出されます。
- __init_subclass__(cls, **kwds)¶
サブクラスを更に設定するために使用される classmethod です。デフォルトでは何も行いません。
- _missing_(cls, value)¶
cls で見つからない値を検索するための classmethod です。デフォルトでは何もしませんが、カスタムの検索の振る舞いを実装するためにオーバーライドすることができます:
>>> from enum import auto, StrEnum >>> class Build(StrEnum): ... DEBUG = auto() ... OPTIMIZED = auto() ... @classmethod ... def _missing_(cls, value): ... value = value.lower() ... for member in cls: ... if member.value == value: ... return member ... return None ... >>> Build.DEBUG.value 'debug' >>> Build('deBUG') <Build.DEBUG: 'debug'>
Added in version 3.6.
- __new__(cls, *args, **kwds)¶
デフォルトでは存在しません。指定された場合、列挙型のクラス定義またはmix-inクラス(例えば
intなど)のいずれかで、メンバーに代入されたすべての値が渡されます。例:>>> from enum import Enum >>> class MyIntEnum(int, Enum): ... TWENTYSIX = '1a', 16
この場合は
int('1a', 16)が呼び出され、メンバーの値は26になります。注釈
独自の
__new__を書く場合、super().__new__を使わず、適切な__new__を直接呼び出してください。
- __repr__(self)¶
repr() の呼び出しに使用される文字列を返します。デフォルトでは、 Enum 名、メンバー名、および値を返しますが、オーバーライドすることもできます:
>>> from enum import auto, Enum >>> class OtherStyle(Enum): ... ALTERNATE = auto() ... OTHER = auto() ... SOMETHING_ELSE = auto() ... def __repr__(self): ... cls_name = self.__class__.__name__ ... return f'{cls_name}.{self.name}' ... >>> OtherStyle.ALTERNATE, str(OtherStyle.ALTERNATE), f"{OtherStyle.ALTERNATE}" (OtherStyle.ALTERNATE, 'OtherStyle.ALTERNATE', 'OtherStyle.ALTERNATE')
- __str__(self)¶
str() の呼び出しに使用される文字列を返します。デフォルトでは、 Enum の名前とメンバーの名前を返しますが、オーバーライドすることもできます:
>>> from enum import auto, Enum >>> class OtherStyle(Enum): ... ALTERNATE = auto() ... OTHER = auto() ... SOMETHING_ELSE = auto() ... def __str__(self): ... return f'{self.name}' ... >>> OtherStyle.ALTERNATE, str(OtherStyle.ALTERNATE), f"{OtherStyle.ALTERNATE}" (<OtherStyle.ALTERNATE: 1>, 'ALTERNATE', 'ALTERNATE')
- __format__(self)¶
format() および f-string の呼び出しに使用される文字列を返します。デフォルトでは、
__str__()の戻り値を返しますが、オーバーライドすることもできます。:>>> from enum import auto, Enum >>> class OtherStyle(Enum): ... ALTERNATE = auto() ... OTHER = auto() ... SOMETHING_ELSE = auto() ... def __format__(self, spec): ... return f'{self.name}' ... >>> OtherStyle.ALTERNATE, str(OtherStyle.ALTERNATE), f"{OtherStyle.ALTERNATE}" (<OtherStyle.ALTERNATE: 1>, 'OtherStyle.ALTERNATE', 'ALTERNATE')
バージョン 3.12 で変更: データクラスのサポート が追加されました。
- _add_alias_()¶
既存のメンバーのエイリアスとして新しい名前を追加します。
>>> Color.RED._add_alias_("ERROR") >>> Color.ERROR <Color.RED: 1>
その名前がすでに別のメンバーに割り当てられている場合、
NameErrorを送出します。Added in version 3.13.
- _add_value_alias_()¶
既存のメンバーのエイリアスとして新しい値を追加します。
>>> Color.RED._add_value_alias_(42) >>> Color(42) <Color.RED: 1>
その値がすでに別のメンバーに結び付けられている場合、ValueErrorを送出します。例は MultiValueEnum を参照してください。Added in version 3.13.
- class enum.IntEnum¶
IntEnum は
Enumと同様ですが、メンバーは整数でもあり、整数が使える場所ならどこでも使えます。 IntEnum のメンバーを使って整数演算を行うと、結果の値は列挙型ではなくなります。>>> from enum import IntEnum >>> class Number(IntEnum): ... ONE = 1 ... TWO = 2 ... THREE = 3 ... >>> Number.THREE <Number.THREE: 3> >>> Number.ONE + Number.TWO 3 >>> Number.THREE + 5 8 >>> Number.THREE == 3 True
バージョン 3.11 で変更:
__str__()は、既存の定数を置き換えるユースケースをより良くサポートするためにint.__str__()に変更されました。同じ理由で、__format__()は既にint.__format__()に変更されています。
- class enum.StrEnum¶
StrEnum は
Enumと同様ですが、メンバーは文字列でもあり、文字列が使える場所のほとんどで使えます。 StrEnum のメンバーに対して、またはそれを使って文字列操作を行った結果は、列挙型のメンバーにはなりません。>>> from enum import StrEnum, auto >>> class Color(StrEnum): ... RED = 'r' ... GREEN = 'g' ... BLUE = 'b' ... UNKNOWN = auto() ... >>> Color.RED <Color.RED: 'r'> >>> Color.UNKNOWN <Color.UNKNOWN: 'unknown'> >>> str(Color.UNKNOWN) 'unknown'
注釈
標準ライブラリには
strのサブクラスを受け付けず、型が厳密にstrかどうかを調べる箇所があります (つまりisinstance(unknown, str)ではなくtype(unknown) == strを使います)。 そのような箇所ではstr(MyStrEnum.MY_MEMBER)を使う必要があります。注釈
__str__()は 既存の定数の置換 ユースケースをより良くサポートするためにstr.__str__()となりました。__format__()も同様に、同じ理由でstr.__format__()となりました。Added in version 3.11.
- class enum.Flag¶
FlagはEnumと同様ですが、メンバーはビット演算子&(AND)、|(OR)、^(XOR)、~(INVERT) をサポートします。 これらの演算結果は列挙型のメンバー (のエイリアス) になります。- __contains__(self, value)¶
値を含む場合に True を返します:
>>> from enum import Flag, auto >>> class Color(Flag): ... RED = auto() ... GREEN = auto() ... BLUE = auto() ... >>> purple = Color.RED | Color.BLUE >>> white = Color.RED | Color.GREEN | Color.BLUE >>> Color.GREEN in purple False >>> Color.GREEN in white True >>> purple in white True >>> white in purple False
- __iter__(self)¶
このフラグに含まれるメンバーのうち、エイリアスでないものをすべて返します。
>>> list(Color.RED) [<Color.RED: 1>] >>> list(purple) [<Color.RED: 1>, <Color.BLUE: 4>]
Added in version 3.11.
- __len__(self)¶
flag 内のメンバーの数を返します:
>>> len(Color.GREEN) 1 >>> len(white) 3
Added in version 3.11.
- __bool__(self)¶
メンバーがflagに含まれている場合は True を返し、それ以外の場合は False を返します:
>>> bool(Color.GREEN) True >>> bool(white) True >>> black = Color(0) >>> bool(black) False
- __or__(self, other)¶
現在のフラグと他のフラグの論理和となるフラグを返します:
>>> Color.RED | Color.GREEN <Color.RED|GREEN: 3>
- __and__(self, other)¶
現在のフラグと他のフラグの論理積となるフラグを返します:
>>> purple & white <Color.RED|BLUE: 5> >>> purple & Color.GREEN <Color: 0>
- __xor__(self, other)¶
現在のフラグと他のフラグの排他的論理和となるフラグを返します:
>>> purple ^ white <Color.GREEN: 2> >>> purple ^ Color.GREEN <Color.RED|GREEN|BLUE: 7>
- __invert__(self)¶
type(self) に含まれるフラグのうち、self に含まれないものをすべて返します。
>>> ~white <Color: 0> >>> ~purple <Color.GREEN: 2> >>> ~Color.RED <Color.GREEN|BLUE: 6>
バージョン 3.11 で変更: 値がゼロのフラグの repr() が変更されました。 現在は次のようになります:
>>> Color(0) <Color: 0>
- class enum.IntFlag¶
IntFlagはFlagと同様ですが、メンバーは整数でもあり、整数が使える場所ならどこでも使えます。>>> from enum import IntFlag, auto >>> class Color(IntFlag): ... RED = auto() ... GREEN = auto() ... BLUE = auto() ... >>> Color.RED & 2 <Color: 0> >>> Color.RED | 2 <Color.RED|GREEN: 3>
IntFlag のメンバーと整数の演算が行われた場合、結果は IntFlag ではありません:
>>> Color.RED + 2 3
IntFlag のメンバーに対して
Flagの演算を行うと:結果が有効な IntFlag: IntFlag が返されます
結果が有効な IntFlag でない場合、結果は
FlagBoundaryの設定によって決まります。
名前がなく値がゼロのフラグの
repr()が変更されました。 現在は次のようになります。>>> Color(0) <Color: 0>
バージョン 3.11 で変更:
__str__()は、既存の定数を置き換えるユースケースをより良くサポートするためにint.__str__()に変更されました。同じ理由で、__format__()は既にint.__format__()に変更されています。IntFlagの反転は、与えられたフラグ以外のすべてのフラグの結合となる正の値を返すようになりました。これは既存のFlagの振る舞いに一致します。
- class enum.ReprEnum¶
ReprEnumはEnumのrepr()を使いますが、str()には混ぜ込まれたデータ型のものを使います:ReprEnumを継承することで、Enumデフォルトのstr()を使用する代わりに、mix-inされたデータ型のstr()/format()を使用します。Added in version 3.11.
- class enum.EnumCheck¶
EnumCheck には、
verify()デコレータが各種の制約を確認するために使うオプションが含まれています。 制約を満たさない場合はValueErrorが送出されます。- UNIQUE¶
それぞれの値が1つの名前しか持たないことを確認します:
>>> from enum import Enum, verify, UNIQUE >>> @verify(UNIQUE) ... class Color(Enum): ... RED = 1 ... GREEN = 2 ... BLUE = 3 ... CRIMSON = 1 Traceback (most recent call last): ... ValueError: aliases found in <enum 'Color'>: CRIMSON -> RED
- CONTINUOUS¶
最小値のメンバーと最大値のメンバーの間に欠損値がないことを確認します:
>>> from enum import Enum, verify, CONTINUOUS >>> @verify(CONTINUOUS) ... class Color(Enum): ... RED = 1 ... GREEN = 2 ... BLUE = 5 Traceback (most recent call last): ... ValueError: invalid enum 'Color': missing values 3, 4
- NAMED_FLAGS¶
フラグのグループやマスクに、名前付きのフラグだけが含まれることを確認します。
auto()で値を生成する代わりに、値を直接指定する場合に便利です。>>> from enum import Flag, verify, NAMED_FLAGS >>> @verify(NAMED_FLAGS) ... class Color(Flag): ... RED = 1 ... GREEN = 2 ... BLUE = 4 ... WHITE = 15 ... NEON = 31 Traceback (most recent call last): ... ValueError: invalid Flag 'Color': aliases WHITE and NEON are missing combined values of 0x18 [use enum.show_flag_values(value) for details]
注釈
CONTINUOUSとNAMED_FLAGSは整数値のメンバーとともに動作するように設計されています。
Added in version 3.11.
- class enum.FlagBoundary¶
FlagBoundaryはFlagとそのサブクラスで範囲外の値をどう扱うかを制御します。- STRICT¶
範囲外の値は
ValueErrorを送出します。これはFlagのデフォルトです:>>> from enum import Flag, STRICT, auto >>> class StrictFlag(Flag, boundary=STRICT): ... RED = auto() ... GREEN = auto() ... BLUE = auto() ... >>> StrictFlag(2**2 + 2**4) Traceback (most recent call last): ... ValueError: <flag 'StrictFlag'> invalid value 20 given 0b0 10100 allowed 0b0 00111
- CONFORM¶
範囲外の値から無効な部分を取り除き、有効な
Flagの値を残します。>>> from enum import Flag, CONFORM, auto >>> class ConformFlag(Flag, boundary=CONFORM): ... RED = auto() ... GREEN = auto() ... BLUE = auto() ... >>> ConformFlag(2**2 + 2**4) <ConformFlag.BLUE: 4>
- EJECT¶
範囲外の値は
Flagのメンバーではなくなり、intに戻ります。>>> from enum import Flag, EJECT, auto >>> class EjectFlag(Flag, boundary=EJECT): ... RED = auto() ... GREEN = auto() ... BLUE = auto() ... >>> EjectFlag(2**2 + 2**4) 20
- KEEP¶
範囲外の値をそのまま保持し、
Flagのメンバーであることも維持します。 これはIntFlagのデフォルトです。>>> from enum import Flag, KEEP, auto >>> class KeepFlag(Flag, boundary=KEEP): ... RED = auto() ... GREEN = auto() ... BLUE = auto() ... >>> KeepFlag(2**2 + 2**4) <KeepFlag.BLUE|16: 20>
Added in version 3.11.
- class enum.EnumDict¶
EnumDict は
dictのサブクラスで、列挙型クラスを定義する名前空間として使います (クラスの名前空間の準備 を参照)。 メンバーごとに複数の値を持たせるなど、高度な動作を持つEnumTypeのサブクラスを作成できるように公開されています。 作成する列挙型クラスの名前を渡して呼び出してください。 そうしないと、プライベートな名前や内部クラスが正しく処理されません。オーバーライドされているのは
MutableMappingのインターフェイス (__setitem__()とupdate()) だけであることに注意してください。|=など、ほかのdictの操作では検査を回避できる場合があります。- member_names¶
メンバー名のリスト。
Added in version 3.13.
__dunder__ 名のサポート¶
__members__ は読み込み専用の、 member_name:member を要素とする順序付きマッピングです。これはクラスでのみ利用可能です。
__new__() を指定する場合は、列挙型のメンバーを作成して返す必要があります。
メンバーの _value_ を適切に設定することも強く推奨します。
すべてのメンバーの作成が終わると、このメソッドは使われなくなります。
_sunder_ 名のサポート¶
_name_-- メンバー名_value_-- メンバーの値;__new__で設定できます_missing_()-- 値が見付からなかったときに使われる検索関数; オーバーライドできます_ignore_-- 名前のリストで、listもしくはstrです。この名前の要素はメンバーへの変換が行われず、最終的なクラスから削除されます。_order_-- no longer used, kept for backward compatibility (class attribute, removed during class creation)_generate_next_value_()-- 列挙型のメンバーの適切な値を取得するのに使われます。 オーバーライドできます。_add_alias_()-- 既存のメンバーのエイリアスとして新しい名前を追加します。_add_value_alias_()-- 既存のメンバーのエイリアスとして新しい値を追加します。_sunder_名は通常、Enumクラスの今後の開発のために予約されており使えませんが、明示的に許可されているものもあります:IPython のリッチな表示機能 で使われる
_repr_*(_repr_html_など)
Added in version 3.6: _missing_, _order_, _generate_next_value_
Added in version 3.7: _ignore_
Added in version 3.13: _add_alias_, _add_value_alias_, _repr_*
ユーティリティとデコレータ¶
- class enum.auto¶
値の代わりに auto を使えます。 使った場合、Enum の仕組みが
Enumの_generate_next_value_()を呼び出し、適切な値を取得します。EnumとIntEnumでは、それまでの最大値に 1 を加えた値になります。FlagとIntFlagでは、それまでの最大値を超える最小の 2 の累乗になります。StrEnumではメンバー名を小文字にした値になります。 auto() と手動で指定した値を混在させる場合は注意が必要です。auto インスタンスが値に置き換えられるのは、代入の最上位に単独で置くか、タプルの要素として置く場合だけです:
FIRST = auto()は動作します(auto() は1に置き換えられます)SECOND = auto(), -2は動作します(auto は2に置き換えられるため、SECOND列挙型のメンバーには2, -2が使用されます)THIRD = [auto(), -3]は意図どおりには動作 しません ([<auto instance>, -3]を使って列挙型のメンバーTHIRDが作成されます)。
バージョン 3.11.1 で変更: 以前のバージョンでは、
auto()は、代入行に他のものがあると正しく動作しませんでした。_generate_next_value_は、 auto が使用する値をカスタマイズするためにオーバーライドすることができる。注釈
In version 3.13 the default
_generate_next_value_will always return the highest member value incremented by 1, and will fail if any member is an incompatible type.
- @enum.property¶
組み込みの
@propertyに似ていますが、列挙型専用のデコレータです。 メンバーの属性に、メンバー自体と同じ名前を使えるようにします。注釈
property とメンバーは別々のクラスで定義する必要があります。 例えば value と name 属性は Enum クラスで定義されていますが、Enum のサブクラスでは
valueやnameという名前のメンバーを定義できます。Added in version 3.11.
- @enum.unique¶
列挙型専用の
classデコレーターです。列挙型の__members__に別名がないかどうか検索します; 見つかった場合、ValueErrorが詳細情報とともに送出されます:>>> from enum import Enum, unique >>> @unique ... class Mistake(Enum): ... ONE = 1 ... TWO = 2 ... THREE = 3 ... FOUR = 3 ... Traceback (most recent call last): ... ValueError: duplicate values found in <enum 'Mistake'>: FOUR -> THREE
- @enum.verify¶
列挙型専用の
classデコレーターです。対象の列挙型に対してチェックを行う制約の指定にはEnumCheckのメンバーが使用されます。Added in version 3.11.
- @enum.member¶
列挙型で使用するデコレータ: 対象は列挙型のメンバー になります。
Added in version 3.11.
- @enum.nonmember¶
列挙型で使用するデコレータ: 対象は列挙型のメンバー になりません。
Added in version 3.11.
- @enum.global_enum¶
列挙型の
str()とrepr()を変更して、メンバーがクラスではなくモジュールに属するように表示するデコレータです。 列挙型のメンバーをモジュールのグローバル名前空間に公開している場合だけ使ってください (例はre.RegexFlagを参照)。Added in version 3.11.
- enum.show_flag_values(value)¶
フラグの value に含まれる全ての2の累乗の整数のリストを返します。
Added in version 3.11.
注釈¶
これらの3つの列挙型は、既存の整数ベースおよび文字列ベースの値の代替として設計されています。そのため、追加の制限があります:
__str__は、列挙型のメンバーの名前ではなく値を使用します
__format__は__str__を使用するため、列挙型のメンバーの名前ではなく値を使用しますもし、そのような制限が必要でない/望まない場合は、
intまたはstrタイプを継承して、カスタムの基底クラスを作成することができます:>>> from enum import Enum >>> class MyIntEnum(int, Enum): ... passまたは列挙型の中で適切な
str()などを再代入することもできます:>>> from enum import Enum, IntEnum >>> class MyIntEnum(IntEnum): ... __str__ = Enum.__str__