0Pricing
Python Academy · レッスン

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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Enumクラス
  2. IntEnumとFlag
  3. NamedTupleの基礎
  4. typing.NamedTuple
← Python Academyに戻る