Wissensdatenbank von GCSoft

>> Wissensdatenbank / Python 3

Aufzählungstypen - Enum

Ein Aufzählungstyp ist ein Datentyp, dessen Wertebereich eine Menge von symbolischen Konstanten ist.

Die Standardbibliothek von Python enthält das Modul enum, das die Basisklasse Enum für
unveränderliche Aufzählungstypen bereitstellt.

Ein Enum wird wie folgt angelegt:
Beispiel:
import enum
class Wochentag(enum.Enum):
    Montag = 1
    Dienstag = 2
    Mittwoch = 3
    ...

Zugriffsarten:
Wochentag.Samstag
Wochentag(6)
Wochentag["Samstag"]

Auf den symbolischen Namen kan über das Attribut name zugegriffen werden:
Wochentag.Samstag.name => 'Samstag'

Aufzählungstypen lassen sich nur untereinander vergleichen, insbesondere ist auch kein Vergleich mit dem
internen Wert zulässig.

Aufzählungstypen erlauben es, ihre Werte zu durchlaufen:
for tag in Wochentag:
    print(tag)

Seit Python 3.6 existiert die Funktion auto, mit deren Hilfe sich ein Aufzählungstyp definieren
lässt, ohne konkrete interne Werte zu vergeben:
class Wochentag(enum.Enum):
    Montag = enum.auto()
    Dienstag = enum.auto()
    Mittwoch = enum.auto()
    ...

Aufzählungstyp für Bitmuster - Flag

Der Aufzählungstyp Flag definiert die internen Werte so, dass die symbolischen Konstanten mithilfe
bitweiser Operatoren miteinander kombiniert werden können.
Beispiel:
import enum
class Ampel(enum.Enum):
    Rot = enum.auto()
    Gelb = enum.auto()
    Grün = enum.auto()

kombinierter_zustand = Ampel.Rot | Ampel.Gelb
ist_rot_enthalten = kombinierter_zustand & Ampel.Rot

Das Ergebnis des bitweisen UND kann als Wahrheitswert interpretiert werden:
bool(kombinierter_zustand & Ampel.Rot)

Ganzzahlige Aufzählungstypen - IntEnum

Im Modul enum existiert der Datentyp IntEnum, der sich analog zu Enum verwenden lässt.
Aufzählungswerte eines Aufzählungstyps, der von IntEnum erbt, können verwendet werden, als
wären sie ganze Zahlen.
Beispiel:
import enum
class Wochentag(enum.IntEnum):
    Montag = 1
    Dienstag = 2
    Mittwoch = 3
    ...

Wochentag.Montag + Wochentag.Dienstag => 3

Insbesondere sind auch Vergleiche und Operationen mit Werten verschiedener IntEnum-Aufzählungen zulässig.