Enumクラス
名前付き定数のグループを定義します
「Enumクラス」はCoddyKit上の無料Python Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPython Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Python Academyコースには全4レッスンが含まれています。
なぜEnumを使うのか
enum(列挙型)とは、関連する名前付き定数値の集合です。コード中にマジック文字列や数値を散在させる代わりに、それぞれの値に分かりやすい名前を付けます。
- コードが自己説明的になります。
- タイプミスを防げます。
- 固定された既知の選択肢を表せます。
Enumの定義
Enumをサブクラス化し、メンバーをNAME = valueの形式で列挙します。慣例として、メンバー名には大文字を使います。
from enum import Enum
class Color(Enum):
RED = 1
GREEN = 2
BLUE = 3
print(Color.RED)nameとvalue
すべてのenumメンバーには、識別子である.nameと、割り当てられた値である.valueがあります。
from enum import Enum
class Color(Enum):
RED = 1
GREEN = 2
c = Color.GREEN
print(c.name)
print(c.value)メンバーはシングルトン
各メンバーは一意なシングルトンオブジェクトです。メンバーの比較にはisまたは==を使います。同じメンバーは常にまったく同じオブジェクトです。
from enum import Enum
class Color(Enum):
RED = 1
BLUE = 2
print(Color.RED is Color.RED)
print(Color.RED == Color.BLUE)値による検索
enumクラスを値とともに呼び出すと、一致するメンバーを取得できます。未知の値を指定するとValueErrorが発生します。
from enum import Enum
class Color(Enum):
RED = 1
GREEN = 2
print(Color(2))
try:
Color(99)
except ValueError as e:
print('Bad value:', e)名前による検索
メンバー名の文字列を使った角括弧アクセスで、名前からメンバーを検索できます。設定ファイルやユーザー入力から名前を読み取る場合に便利です。
from enum import Enum
class Color(Enum):
RED = 1
GREEN = 2
print(Color['GREEN'])メンバーの反復処理
enumは反復可能です。ループすると定義された順序で各メンバーが得られるため、メニューの作成や選択肢の検証に適しています。
from enum import Enum
class Color(Enum):
RED = 1
GREEN = 2
BLUE = 3
for c in Color:
print(c.name, c.value)文字列値
enumの値は整数に限りません。特にシリアライズや保存の対象となる値には、文字列がよく使われます。
from enum import Enum
class Status(Enum):
ACTIVE = 'active'
PAUSED = 'paused'
CLOSED = 'closed'
print(Status.PAUSED.value)
print(Status('closed'))値へのauto()の使用
実際の数値が重要でない場合は、auto()を使って値を自動的に割り当てます。値は1から始まり、順に増加します。
from enum import Enum, auto
class Direction(Enum):
NORTH = auto()
SOUTH = auto()
EAST = auto()
WEST = auto()
for d in Direction:
print(d.name, d.value)関数でのenum
関数の引数にenumを使うと、意図が明確になり、不正な入力を防げます。ロジック内ではメンバーを直接比較します。
from enum import Enum
class Light(Enum):
RED = 1
YELLOW = 2
GREEN = 3
def can_go(light):
return light is Light.GREEN
print(can_go(Light.GREEN))
print(can_go(Light.RED))辞書でのメンバーの使用
enumメンバーはハッシュ化可能なので、辞書のキーとして使えます。名前付き定数ごとにデータを関連付ける、すっきりした方法です。
from enum import Enum
class Color(Enum):
RED = 1
GREEN = 2
BLUE = 3
hex_codes = {Color.RED: '#ff0000', Color.GREEN: '#00ff00'}
print(hex_codes[Color.RED])確認問題
2つのenumメンバーが同一のオブジェクトかどうかを正しく比較するには、どうすればよいですか。
まとめ
Enumを使って名前付き定数のグループを定義する方法を学びました。
- メンバーには
.nameと.valueがあります。 - 値では
Color(v)、名前ではColor['NAME']を使って検索します。 - enumは反復可能で、メンバーはシングルトンです。
- 正確な値が重要でない場合は
auto()を使います。
よくある質問
「Enumクラス」レッスンは無料ですか?
はい。「Enumクラス」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Python Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Python Academyコースには全4レッスンが含まれています。
「Enumクラス」で何を学びますか?
名前付き定数のグループを定義します ブラウザで直接実行するハンズオンコードでPython Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Python Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのPython Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「Enumクラス」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このPython Academyレッスンでコードを書いて実行できますか?
はい。すべてのPython Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。