enum【列挙型モジュール】3.43.5~3.7 / 3.113.12
EnumType【列挙型メタクラス】3.113.12
Enum【列挙型 (基本クラス)】3.6~3.7 / 3.113.12
IntEnum【列挙型 (整数)】3.11
Flag【列挙型 (ビットフラグ)】3.63.11
IntFlag【列挙型 (整数ビットフラグ)】3.63.11
StrEnum【列挙型 (文字列)】3.11
メモ
概要
- 言語組み込みの列挙型ではなく、 標準ライブラリの enum【列挙型モジュール】3.4 として提供
- 以下の列挙型を提供
- Enum【列挙型 (基本クラス)】3.6~3.7 / 3.113.12 ( EnumType【列挙型メタクラス】3.113.12 )
- IntEnum【列挙型 (整数)】3.11
- Flag【列挙型 (ビットフラグ)】3.63.11
- IntFlag【列挙型 (整数ビットフラグ)】3.63.11
- StrEnum【列挙型 (文字列)】3.11
使用方法
- 各列挙型のサブクラスとして使用 (但し、一般的なクラスとは相違)〔詳細は各列挙型参照〕
- メソッド定義可:他の言語は不可
- 関数でも作成可:EnumType.__call__【関数呼び出し作成】
- メンバ名は定数として全て大文字推奨 3.6
- 先頭と末尾が 1 個のアンダースコアのメンバ名は定義不可
- pickle 化・unpickle 化 可能
- 継承〔 例 〕
- 列挙子メンバが未定義の場合のみ、継承可
- 独自列挙型〔 例 〕
- 以下の順でサブクラス指定可
- 複数の object ベースのミックスインクラス
- 最大 1 つの具象データ型
- 1 つの基本 enum クラス
- メンバ値はデータ型のコンストラクタに引き渡し
- 以下の順でサブクラス指定可
モジュール定義
- モジュールは下記を定義
基本クラス・メタクラス 備考 EnumType 3.113.12
(別名:EnumMeta3.43.5 )Enum【列挙型 (基本クラス)】のメタクラス Enum 3.6~3.7 / 3.113.12 列挙型 (基本クラス)
全てのenum 列挙型の基本クラス (整数以外も可)ReprEnum 3.11 mix-inのstr【文字列変換】保持の為、以下で使用
IntEnum【列挙型 (整数)】・IntFlag【列挙型 (整数ビットフラグ)】・StrEnum【列挙型 (文字列)】列挙型クラス 備考 IntEnum 3.11 列挙型 (整数)
(整数値との比較可:既存システムとの互換等で使用)Flag 3.63.11 列挙型 (ビットフラグ)
注:str【文字列型】等を定義可、但し他のメンバもビット演算不可IntFlag 3.63.11 列挙型 (整数ビットフラグ)
(整数値との比較可:既存システムとの互換等で使用)StrEnum 3.11 列挙型 (文字列) その他クラス 備考 auto 3.63.11.1 値の自動取得〔例:各列挙型参照〕
下記でオーバーライド可 (メンバ定義の前に定義)3.6
_generate_next_value_(name, start, count, last_values)
戻り値設定値
name定義名
start開始値
count定義数
last_values定義メンバ
※ 数値のデフォルト開始番号:C++等の 0 ではなく 1
※ 最上位にあれば単独でなくても可 (例:括弧のないタプル) 3.11.1〔 例 〕
※ 互換性のない値の指定 (デフォルトに逆行) 3.12 例外3.13〔 例 〕EnumCheck 3.11 制約オプション定数
(@verify【制約検証 デコレータ】のオプション定義)FlagBoundary 3.11 範囲外値の制御 (Flag・IntFlag 用)
(boundary= で指定)
指定値は EnumCheck【制約オプション定数】で定義
・STRICT:範囲外の値はValueError 例外 (Flag【列挙型 (ビットフラグ)】のデフォルト)
・CONFORM:無効ビットフラグ値削除
・EJECT:範囲外の値は int とみなす
・KEEP:範囲外の値は保持し列挙型のまま (IntFlag【列挙型 (整数ビットフラグ)】のデフォルト)
関連:
Enum._missing_(cls)【未検索処理】
EnumType.__call__(cls)【値アクセス】enumtype(メンバ値)メソッド・デコレータ 備考 @global_enum 3.11 グローバル指定デコレータ〔 例 〕
(メンバはモジュール属性)@member 3.11
member(値)3.11メンバ指定〔 例 〕 @nonmember 3.11
nonmember(値)3.11非メンバ指定〔 例 〕 @property 3.11 プロパティ (メンバと同一名も可)〔 例 〕 show_flag_values(value)3.11 ユーティリティ関数:ビットフラグリスト〔例:各列挙型参照〕
valueに含まれる全フラグ (2のべき乗)のリスト
from enum import show_flag_values print(show_flag_values(2)) # 出力:[2] print(show_flag_values(7)) # 出力:[1, 2, 4]
@unique ユニーク デコレータ〔例:各列挙型参照〕
同じ値の別名定義不可 (ValueError 例外)@verify(オプション) 3.11 制約検証 デコレータ〔例:各列挙型参照〕
オプション制約オプション (検証失敗:ValueError 例外)
・UNIQUE:ユニーク (同じ値の別名定義不可)
・CONTINUOUS:連続値で欠損値不可 (Enum・IntEnum で有効)
・NAMED_FLAGS:複数ビットの組み合わせは、単独ビットの定義が必要 (Flag・IntFlag で有効)
関連
外部リンク
例:継承・独自列挙型
例:@global_enum【グローバル指定デコレータ】
例:
@member・member【メンバ指定】
@nonmember・nonmember【非メンバ指定】
例:@property【プロパティ】
EnumType【列挙型メタクラス】3.113.12
(別名:EnumMeta 3.43.5 )
メモ
概要
- Enum【列挙型 (基本クラス)】のメタクラス
- 名前変更:EnumMeta も別名として存続3.11
- サブクラス化可能
メソッド
メソッド | 備考 |
---|---|
__call__( cls (列挙型), value, names=None, *, module=None, qualname=None, type=None, start3.5 =1, boundary3.11 =None) | 関数呼び出し作成〔 例 〕 列挙型 value列挙名 namesメンバ名 / メンバ値 (以下で指定) ・メンバ名の文字列 (スペース区切り) ・メンバ名の文字列 (カンマ区切り) ・メンバ名の list【リスト】 ・メンバ名とメンバ値の tuple【タプル】の list【リスト】 ・メンバ名とメンバ値の dict【辞書】 以下、キーワード引数 moduleモジュール名 qualnameモジュール場所 type複合データ型 start3.5開始値 (auto【値自動取得】で使用) boundary3.11Flag制御 範囲外の値処理 (Flag・IntFlagで使用) |
__call__( cls (列挙型), value) | 値アクセス〔例:各列挙型参照〕 enumtype(メンバ値) メンバ (列挙子) value:検索メンバ値 関連: Enum._missing_(cls)【未検索処理】 FlagBoundary【範囲外値の制御】 |
__contains__( 3.12 cls (列挙型), member) | 所属判定 (列挙型)〔例:各列挙型参照〕 メンバ | メンバ値 in 列挙型 メンバ | メンバ値 not in 列挙型 所属有無 (True:所属あり / False:所属なし) memberメンバ / メンバ値3.12 関連:Flag:__contains__(self)【所属判定 (列挙子:ビットフラグ)】 |
__dir__(cls (列挙型)) | 名前リスト・属性リスト 参考:組み込み関数 dir【名前リスト・属性リスト】 |
__getitem__( cls (列挙型), name) | 名前アクセス〔例:各列挙型参照〕 enumtype['メンバ名'] メンバ (列挙子) name検索メンバ名 KeyError 例外該当なし |
__iter__(cls (列挙型)) | イテレータ (列挙型)〔例:各列挙型参照〕 ・別名は対象外 ・Flag・IntFlag のビットなし・複数ビットも対象外 3.11 関連:Flag.__iter__(self)【イテレータ (列挙子:ビットフラグ)】 |
__len__(cls (列挙型)) | メンバ数〔例:各列挙型参照〕 len(列挙型) ・別名は対象外 ・Flag・IntFlag のビットなし・複数ビットも対象外 3.11 関連:Flag.__len__(self)【ビットフラグ数】 |
__reversed__(cls (列挙型)) | 逆順〔例:各列挙型参照〕 参考:組み込み関数 reversed【逆順】 |
Enum【列挙型 (基本クラス)】3.6~3.7 / 3.113.12
メモ
属性・メソッド
属性 | 備考 |
---|---|
name | メンバ名〔例:各列挙型参照〕 |
value | メンバ値〔例:各列挙型参照〕 |
_ignore_3.7 | 無視リスト (list | str)〔 例 〕 メンバの動的作成可 |
メソッド | 備考 |
__dir__(self (メンバ)) | 名前リスト・属性リスト 参考:組み込み関数 dir【名前リスト・属性リスト】 |
_generate_next_value_(name, start, count, last_values) 3.6 | auto カスタマイズ〔例:各列挙型参照〕 詳細は、auto【値自動取得】参照 |
__init_subclass__(cls (列挙型), **kwds (キーワード引数)) | クラス継承処理 呼出し前にメンバ定義 3.11 |
_missing_( 3.6 cls (列挙型), value (検索メンバ値)) | メンバ値が見つからない場合の処理 (デフォルト:なし / オーバーライド可)〔例:各列挙型参照〕 代替メンバ 関連: EnumType.__call__(cls)【値アクセス】enumtype(メンバ値) FlagBoundary【範囲外値の制御】 |
__repr__(self (メンバ)) 3.12 | 印字可能文字列変換 (オーバーライド可) @dataclass【データクラス】のサポート (データクラス名非表示) 3.12 参考:組み込み関数 repr【印字可能文字列変換】 |
__str__(self (メンバ)) | 文字列変換 (オーバーライド可)〔例:各列挙型参照〕 参考:str【文字列変換】 |
__format__(self (メンバ)) | 書式フォーマット〔例:各列挙型参照〕 format【書式化】・f-string【フォーマット済み文字列リテラル】 Enum.__str__() と同じ結果 3.11 |
概要
- 全てのenum 列挙型の基本クラス
- メタクラス:EnumType【列挙型メタクラス】
- 既存コードで互換性を考慮する場合、IntEnum【列挙型 (整数)】を使用
- 列挙子
- 値は任意
- 別名可 (デフォルト)
使用方法
〔 例 〕- Enum【列挙型 (基本クラス)】のサブクラスを定義し、メンバを指定
- メンバ名:Enum.name【メンバ名】属性
- メンバ値:Enum.value【メンバ値】属性
- 関数でも作成可:__call__【関数呼び出し作成】参照〔 例 〕
- 必要に応じて制約を指定:制約指定 参照
- メソッド定義可
- メンバの動的作成:_ignore_【無視リスト】参照〔 例 〕
値の自動定義
〔 例 〕- auto【値自動取得】を値として定義
- 1 から増加
- 即値と混在:最後の値に 1 を加えた値
- _generate_next_value_【auto カスタマイズ】 のオーバーライドで変更可3.6
制約指定
〔 例 〕- 一意値
- 連続値
- 定義順
- _order_【定義順】3.6
メンバ参照
〔 例 〕- メンバ数:len(cls) (参照:EnumType.__len__(cls)【メンバ数】)
- 別名:対象外
- イテレータ (列挙型):EnumType.__iter__(cls)【イテレータ (列挙型)】
- 別名:対象外
- reversed(Enum)で逆順:EnumType.__reversed__(cls)【逆順】
- 全メンバ列挙:__members__【全メンバ列挙】
- 別名:対象
- 名前アクセス
- Enum['メンバ名']:EnumType.__getitem__【名前アクセス】
- 値アクセス
- Enum(値):EnumType.__call__【値アクセス】
- Enum._missing_(cls)【未検索処理】でメンバ値の未検索処理の変更可
所属・比較
〔 例 〕- 所属
- EnumType.__contains__(cls)【所属判定 (列挙型)】:(メンバ | メンバ値3.12 ) in 列挙型
- 比較
- is・is not:同一性比較
- ==・!=:等価比較 (非列挙型の値とは不等)
- >等:大小比較不可 (値にして比較)
その他
関連
Enum 例:関数呼び出し作成
EnumType.__call__【関数呼び出し作成】
Enum 例:使用方法
Enum 例:メンバ動的作成
Enum 例:値の自動定義
Enum 例:制約指定
Enum 例:メンバ参照
Enum 例:所属・比較
IntEnum【列挙型 (整数)】3.11
メモ
概要
- 整数値の列挙型
- 既存コードの整数値との互換を考慮 (互換性参照)
- int【整数型】とReprEnum【文字列変換】(Enum【列挙型 (基本クラス)】を継承)のサブクラス
- 新規コードでは、Enum【列挙型 (基本クラス)】が適当
- 列挙子
- 値は整数値
- 別名可 (デフォルト)
使用方法
〔 例 〕- IntEnum【列挙型 (整数)】のサブクラスを定義し、メンバを指定
- 指定値は int【整数型】のコンストラクタに引き渡し
- メンバ名:Enum.name【メンバ名】属性
- メンバ値:Enum.value【メンバ値】属性
- 関数でも作成可 (__call__【関数呼び出し作成】参照)
- 必要に応じて制約を指定:制約指定 参照
- メソッド定義可
- メンバの動的作成:_ignore_【無視リスト】参照
値の自動定義
〔 例 〕- auto【値自動取得】を値として定義
- 1 から増加
- 即値と混在:最後の値に 1 を加えた値
- _generate_next_value_【auto カスタマイズ】 のオーバーライドで変更可3.6
制約指定
〔 例 〕- 一意値
- 連続値
- 定義順
- _order_【定義順】3.6
互換性
〔 例 〕- 整数値からの置換が容易になるように、以下の仕様
- __str__:メンバ値 (整数値) 3.11
- __format__:メンバ値 (整数値)
- 型判定
- isinstance【インスタンス判定】:int【整数型】と判定されるので問題なし
- type【型クラス】:enum【列挙型】と判定されるので、int【整数型】に変換が必要
メンバ参照
〔 例 〕- メンバ数:len(cls) (参照:EnumType.__len__(cls)【メンバ数】)
- 別名:対象外
- イテレータ (列挙型):EnumType.__iter__(cls)【イテレータ (列挙型)】
- 別名:対象外
- reversed(IntEnum)で逆順:EnumType.__reversed__(cls)【逆順】
- 全メンバ列挙:__members__【全メンバ列挙】
- 別名:対象
- 名前アクセス
- IntEnum['メンバ名']:EnumType.__getitem__【名前アクセス】
- 値アクセス
- IntEnum(値):EnumType.__call__【値アクセス】
- Enum._missing_(cls)【未検索処理】でメンバ値の未検索処理の変更可
所属・演算・比較
〔 例 〕- 所属
- EnumType.__contains__(cls)【所属判定 (列挙型)】:(メンバ | メンバ値3.12 ) in 列挙型
- 演算
- 整数演算可 (結果:列挙型ではない)
- 比較
- is・is not:同一性比較
- ==・!=:等価比較 (非列挙型の値とは不等)
- >等:大小比較不可 (値にして比較)
その他
関連
IntEnum 例:使用方法
IntEnum 例:互換性
IntEnum 例:値の自動定義
IntEnum 例:制約指定
IntEnum 例:メンバ参照
IntEnum 例:所属・演算・比較
Flag【列挙型 (ビットフラグ)】3.63.11
メモ
メソッド
メソッド | 備考 |
---|---|
__contains__( self (メンバ), value) | 所属判定 (列挙子:ビットフラグ)〔例:各列挙型参照〕 メンバ in メンバ (列挙子) メンバ not in メンバ (列挙子) 所属有無 (True:所属あり / False:所属なし) valueメンバ 関連:EnumType.__contains__(cls)【所属判定 (列挙型)】 |
__iter__(self (メンバ)) 3.11 | イテレータ (列挙子:ビットフラグ)〔例:各列挙型参照〕 関連:EnumType.__iter__(cls)【イテレータ (列挙型)】 |
__len__(self (メンバ)) 3.11 | ビットフラグ数〔例:各列挙型参照〕 len(メンバ (列挙子)) 関連:EnumType.__len__(cls)【メンバ数】 |
__bool__(self (メンバ)) | 真偽値判定〔例:各列挙型参照〕 bool(メンバ) 真偽値 (値が0:False / その他:True) |
__or__( self (メンバ), other (他のメンバ)) | OR:ビット論理和〔例:各列挙型参照〕 メンバ | 他のメンバ 結果のメンバ |
__and__( self (メンバ), other (他のメンバ)) | AND:ビット論理積〔例:各列挙型参照〕 メンバ & 他のメンバ 結果のメンバ |
__xor__( self (メンバ), other (他のメンバ)) | XOR:ビット排他的論理和〔例:各列挙型参照〕 メンバ ^ 他のメンバ 結果のメンバ |
__invert__(self (メンバ)) | 反転:1の補数〔例:各列挙型参照〕 メンバにないビットフラグは無視 (Flagのデフォルト) メンバにないビットフラグも有効 (IntFlagのデフォルト) (FlagBoundary【範囲外値の制御】参照) ~メンバ 結果のメンバ |
_numeric_repr_() 3.11 | メンバ定義がないビットフラグの数値フォーマット関数 |
概要
- ビットフラグ値の列挙型
- 既存コードで互換性を考慮する場合、IntFlag【列挙型 (整数ビットフラグ)】を使用
- 値
- 基本は単独ビットフラグ 3.11
- ビットフラグなし (0)は特殊値
- 複数ビットフラグ可 (デフォルト)
- 別名可 (デフォルト)
- Enum【列挙型 (基本クラス)】のサブクラス
- ビット関連の演算結果もFlag【列挙型 (ビットフラグ)】
使用方法
〔 例 〕- Flag のサブクラスを定義し、メンバを指定
- メンバ名:Enum.name【メンバ名】属性
- メンバ値:Enum.value【メンバ値】属性
- 関数でも作成可:EnumType.__call__【関数呼び出し作成】参照
- 必要に応じて制約を指定:制約指定 参照
- メソッド定義可
- メンバの動的作成:Enum._ignore_【無視リスト】参照
値の自動定義
〔 例 〕- auto【値自動取得】を値として定義
- 1 から始まる 2 の累乗
- 即値と混在:最大値より大きい最初の 2 のべき乗
- _generate_next_value_【auto カスタマイズ】 のオーバーライドで変更可3.6
制約指定
〔 例 〕- 一意値
- 複数ビットの組み合わせ
- @verify(NAMED_FLAGS)【制約検証 デコレータ】 (単独ビットの定義が必要)
- 範囲外の値
- 定義順
- _order_【定義順】3.6
メンバ参照
〔 例 〕- メンバ数:len(cls) (参照:EnumType.__len__(cls)【メンバ数】)
- 別名:対象外
- ビットフラグなし (0):対象外
- 複数ビットフラグ:対象外 3.11
- ビットフラグ数 3.11:Flag.__len__(self)【ビットフラグ数】
- イテレータ (列挙型):EnumType.__iter__(cls)【イテレータ (列挙型)】
- 別名:対象外
- ビットフラグなし (0):対象外
- 複数ビットフラグ:対象外 3.11
- reversed(Flag)で逆順:EnumType.__reversed__(cls)【逆順】
- 全メンバ列挙:__members__【全メンバ列挙】
- 別名:対象
- ビットフラグなし (0):対象
- 複数ビットフラグ:対象
- イテレータ (列挙子:ビットフラグ) 3.11:Flag.__iter__(self)【イテレータ (列挙子:ビットフラグ)】
- 名前アクセス
- Flag['メンバ名']:EnumType.__getitem__【名前アクセス】
- 値アクセス
- Flag(値):EnumType.__call__【値アクセス】
- ビットフラグなし (0) は特殊値
- Enum._missing_(cls)【未検索処理】でメンバ値の未検索処理の変更可
所属・演算・比較
〔 例 〕- 所属
- (メンバ | メンバ値3.12 ) in 列挙型:EnumType.__contains__(cls)【所属判定 (列挙型)】
- 列挙子 in 列挙子:Flag.__contains__(self)【所属判定 (列挙子:ビットフラグ)】
- ビットフラグ演算 (FlagBoundary【範囲外値の制御】 参照)
- 比較
- is・is not:同一性比較
- ==・!=:等価比較 (非列挙型の値とは不等)
- >等:大小比較不可 (値にして比較)
その他
関連
Flag 例:使用方法
Flag 例:値の自動定義
Flag 例:制約指定
Flag 例:メンバ参照
Flag 例:所属・演算・比較
IntFlag【列挙型 (整数ビットフラグ)】3.63.11
メモ
概要
- 整数ビットフラグ値の列挙型
- 既存コードの整数ビットフラグ値との互換を考慮 (互換性参照)
- 新規コードでは、Flag【列挙型 (ビットフラグ)】が適当
- 値
- 基本は単独ビットフラグ 3.11
- ビットフラグなし (0)は特殊値
- 複数ビットフラグ可 (デフォルト)
- 別名可 (デフォルト)
- int【整数型】とReprEnum【文字列変換】(Enum【列挙型 (基本クラス)】を継承)とFlag【列挙型 (ビットフラグ)】のサブクラス
- ビット関連の演算結果は整数
使用方法
〔 例 〕- IntFlag のサブクラスを定義し、メンバを指定
- 指定値は int【整数型】のコンストラクタに引き渡し
- メンバ名:Enum.name【メンバ名】属性
- メンバ値:Enum.value【メンバ値】属性
- 関数でも作成可:EnumType.__call__【関数呼び出し作成】参照
- 必要に応じて制約を指定:制約指定 参照
- メソッド定義可
- メンバの動的作成:Enum._ignore_【無視リスト】参照
互換性
〔 例 〕- 整数値からの置換が容易になるように、以下の仕様
- __str__:
メンバメンバ値 (整数値) 3.11- int.__str__() を使用 (ReprEnum【文字列変換】) 3.11
- __format__:メンバ値 (整数値)
- __str__:
- 型判定
- isinstance【インスタンス判定】:int【整数型】と判定されるので問題なし
- type【型クラス】:enum【列挙型】と判定されるので、int【整数型】に変換が必要
値の自動定義
〔 例 〕- auto【値自動取得】を値として定義
- 1 から始まる 2 の累乗
- 即値と混在:最大値より大きい最初の 2 のべき乗
- _generate_next_value_【auto カスタマイズ】 のオーバーライドで変更可3.6
制約指定
〔 例 〕- 一意値
- 複数ビットの組み合わせ
- @verify(NAMED_FLAGS)【制約検証 デコレータ】 (単独ビットの定義が必要)
- 範囲外の値
- 定義順
- _order_【定義順】3.6
メンバ参照
〔 例 〕- メンバ数:len(cls) (参照:EnumType.__len__(cls)【メンバ数】)
- 別名:対象外
- ビットフラグなし (0):対象外
- 複数ビットフラグ:対象外 3.11
- ビットフラグ数 3.11:Flag.__len__(self)【ビットフラグ数】
- イテレータ (列挙型):EnumType.__iter__(cls)【イテレータ (列挙型)】
- 別名:対象外
- ビットフラグなし (0):対象外
- 複数ビットフラグ:対象外 3.11
- reversed(IntFlag)で逆順:EnumType.__reversed__(cls)【逆順】
- 全メンバ列挙:__members__【全メンバ列挙】
- 別名:対象
- ビットフラグなし (0):対象
- 複数ビットフラグ:対象
- イテレータ (列挙子:ビットフラグ) 3.11:Flag.__iter__(self)【イテレータ (列挙子:ビットフラグ)】
- 名前アクセス
- IntFlag['メンバ名']:EnumType.__getitem__【名前アクセス】
- 値アクセス
- IntFlag(値):EnumType.__call__【値アクセス】
- ビットフラグなし (0) は特殊値
- Enum._missing_(cls)【未検索処理】でメンバ値の未検索処理の変更可
所属・演算・比較
〔 例 〕- 所属
- (メンバ | メンバ値3.12 ) in 列挙型:EnumType.__contains__(cls)【所属判定 (列挙型)】
- 列挙子 in 列挙子:Flag.__contains__(self)【所属判定 (列挙子:ビットフラグ)】
- ビットフラグ演算 (FlagBoundary【範囲外値の制御】 参照)
- 比較
- is・is not:同一性比較
- ==・!=:等価比較 (値で比較)
- >等:大小比較 (値で比較)
その他
関連
IntFlag 例:使用方法
IntFlag 例:互換性
IntFlag 例:値の自動定義
IntFlag 例:制約指定
IntFlag 例:メンバ参照
IntFlag 例:所属・演算・比較
StrEnum【列挙型 (文字列)】3.11
メモ
概要
- 文字列の列挙型
- 既存コードの文字列との互換を考慮 (互換性参照)
- str【文字列型】とReprEnum【文字列変換】(Enum【列挙型 (基本クラス)】を継承)のサブクラス
- 列挙子
- 値は文字列のみ有効 (指定値はstr【文字列型】のコンストラクタに引き渡し)
- 別名可 (デフォルト)
使用方法
〔 例 〕- StrEnum【列挙型 (文字列)】のサブクラスを定義し、メンバを指定
- メンバ名:Enum.name【メンバ名】属性
- メンバ値:Enum.value【メンバ値】属性
- 関数でも作成可:EnumType.__call__【関数呼び出し作成】参照
- 必要に応じて制約を指定:制約指定 参照
- メソッド定義可
- メンバの動的作成:Enum._ignore_【無視リスト】参照
値の自動定義
〔 例 〕- auto【値自動取得】を値として定義
- 小文字のメンバ名
- _generate_next_value_【auto カスタマイズ】 のオーバーライドで変更可3.6
制約指定
〔 例 〕- 一意値
- 定義順
- _order_【定義順】3.6
互換性
〔 例 〕- 既存文字列の置換を考慮し、以下の仕様
(str【文字列型】とEnum【列挙型 (基本クラス)】の継承とは相違)- __str__:メンバ値 (文字列)
- __format__:メンバ値 (文字列)
- 型判定
- isinstance【インスタンス判定】:str【文字列型】と判定されるので問題なし
- type【型クラス】:enum【列挙型】と判定されるので、str【文字列型】に変換が必要
メンバ参照
〔 例 〕- メンバ数:len(cls) (参照:EnumType.__len__(cls)【メンバ数】)
- 別名:対象外
- イテレータ (列挙型):EnumType.__iter__(cls)【イテレータ (列挙型)】
- 別名:対象外
- reversed(StrEnum)で逆順:EnumType.__reversed__(cls)【逆順】
- 全メンバ列挙:__members__【全メンバ列挙】
- 別名:対象
- 名前アクセス
- StrEnum['メンバ名']:EnumType.__getitem__【名前アクセス】
- 値アクセス
- StrEnum(値):EnumType.__call__【値アクセス】
- Enum._missing_(cls)【未検索処理】でメンバ値の未検索処理の変更可
所属・演算・比較
〔 例 〕- 所属
- (メンバ | メンバ値3.12 ) in 列挙型:EnumType.__contains__(cls)【所属判定 (列挙型)】
- 演算
- str【文字列型】の演算可
- 比較
- is・is not:同一性比較
- ==・!=:等価比較 (値で比較)
- >等:大小比較 (値で比較)