0Pricing
Python Academy · レッスン

IntEnumとFlag

整数型とフラグ型の列挙型を使用します

「IntEnumとFlag」はCoddyKit上の無料Python Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPython Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Python Academyコースには全4レッスンが含まれています。

単純なEnumの先へ

enumモジュールには、用途に特化した基底クラスが用意されています。IntEnumのメンバーは整数のように動作し、Flagのメンバーはビット演算子で組み合わせられます。通常のEnumでは制限が多すぎる場合に利用できます。

通常のEnumはintではない

通常のEnumのメンバーは、対応する整数値と互換ではありません。数値と比較するとFalseになります。

from enum import Enum

class Level(Enum):
    LOW = 1
    HIGH = 2

print(Level.LOW == 1)

IntEnumはintとして比較される

IntEnumのメンバーは整数そのものなので、対応する数値と等しいと判定され、順序付けもサポートします。

from enum import IntEnum

class Level(IntEnum):
    LOW = 1
    HIGH = 2

print(Level.LOW == 1)
print(Level.LOW < Level.HIGH)

算術演算でのIntEnum

メンバーは実際の整数なので、計算やインデックス指定に使えます。値を数値処理のコードと連携させる必要がある場合に使用します。

from enum import IntEnum

class Priority(IntEnum):
    LOW = 1
    MEDIUM = 5
    HIGH = 10

print(Priority.HIGH + 1)
print(Priority.MEDIUM * 2)

IntEnumメンバーのソート

IntEnumは順序付けをサポートするため、メンバーのリストを追加のキー関数なしで値の順にソートできます。

from enum import IntEnum

class Priority(IntEnum):
    LOW = 1
    MEDIUM = 5
    HIGH = 10

for p in sorted([Priority.HIGH, Priority.LOW, Priority.MEDIUM]):
    print(p.name)

組み合わせ可能なオプションにFlagを使う

Flag enumは、値を組み合わせて使うためのものです。各メンバーがそれぞれ独自のビットを占めるように、2の累乗を割り当てます。

from enum import Flag, auto

class Permission(Flag):
    READ = auto()
    WRITE = auto()
    EXECUTE = auto()

print(Permission.READ)
print(Permission.READ.value)

|によるFlagの組み合わせ

ビット単位のOR演算子|を使って、複数のFlagを1つの複合値にまとめます。

from enum import Flag, auto

class Permission(Flag):
    READ = auto()
    WRITE = auto()
    EXECUTE = auto()

access = Permission.READ | Permission.WRITE
print(access)

inによるメンバーシップの確認

in演算子を使ってFlagが設定されているか確認します。ビット単位のテストを自動的に実行してくれます。

from enum import Flag, auto

class Permission(Flag):
    READ = auto()
    WRITE = auto()
    EXECUTE = auto()

access = Permission.READ | Permission.WRITE
print(Permission.READ in access)
print(Permission.EXECUTE in access)

共通部分と削除

&(AND)でFlagを組み合わせると共通するビットを見つけられます。また、補数~との&を使ってFlagを削除できます。

from enum import Flag, auto

class Permission(Flag):
    READ = auto()
    WRITE = auto()
    EXECUTE = auto()

access = Permission.READ | Permission.WRITE
still = access & ~Permission.WRITE
print(still)

整数FlagにIntFlagを使う

IntFlagは両方の特性を組み合わせたものです。組み合わせ可能なFlagでありながら通常の整数のようにも動作するため、C APIや数値として保存されたビットマスクとの連携に便利です。

from enum import IntFlag, auto

class Mode(IntFlag):
    R = 4
    W = 2
    X = 1

m = Mode.R | Mode.W
print(int(m))

組み合わせたFlagの反復処理

組み合わせたFlagの値をループすると、その値に含まれる個々のFlagが得られます。アクティブなオプションを一覧表示する場合に便利です。

from enum import Flag, auto

class Permission(Flag):
    READ = auto()
    WRITE = auto()
    EXECUTE = auto()

access = Permission.READ | Permission.EXECUTE
for p in access:
    print(p.name)

確認問題

通常のEnumではなくFlag enumを選ぶのはなぜですか。

まとめ

整数enumとFlag enumを学びました。

  • IntEnumのメンバーは整数のように動作し、順序付けと算術演算をサポートします。
  • Flagのメンバーは|、&、~で組み合わせられ、inでテストできます。
  • IntFlagは両方の動作を組み合わせます。
  • Flagの値には2の累乗を使います。

よくある質問

「IntEnumとFlag」レッスンは無料ですか?

はい。「IntEnumとFlag」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Python Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Python Academyコースには全4レッスンが含まれています。

「IntEnumとFlag」で何を学びますか?

整数型とフラグ型の列挙型を使用します ブラウザで直接実行するハンズオンコードでPython Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Python Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのPython Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「IntEnumとFlag」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このPython Academyレッスンでコードを書いて実行できますか?

はい。すべてのPython Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

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

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