Python Academy · Lektion

Enum-klassen

Definiera grupper av namngivna konstanter

Lektion 1 av 413 steg

Enum-klassen är en gratis lektion i Python Academy på CoddyKit. Detta är lektion 1 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Python Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Python Academy innehåller totalt 4 lektioner.

Varför enum?

En enum (uppräkning) är en uppsättning namngivna konstantvärden som hör ihop. I stället för att sprida magiska strängar eller tal i koden ger Ni varje värde ett tydligt namn.

  • Självförklarande kod.
  • Skydd mot stavfel.
  • En fast och känd uppsättning val.

Definiera en Enum

Skapa en subklass av Enum och ange medlemmarna som NAME = value. Enligt konvention skrivs medlemsnamn med versaler.

from enum import Enum

class Color(Enum):
    RED = 1
    GREEN = 2
    BLUE = 3

print(Color.RED)

name och value

Varje enum-medlem har ett .name (identifieraren) och ett .value (det tilldelade värdet).

from enum import Enum

class Color(Enum):
    RED = 1
    GREEN = 2

c = Color.GREEN
print(c.name)
print(c.value)

Medlemmar är singleton-objekt

Varje medlem är ett unikt singleton-objekt. Jämför medlemmar med is eller ==; samma medlem är alltid exakt samma objekt.

from enum import Enum

class Color(Enum):
    RED = 1
    BLUE = 2

print(Color.RED is Color.RED)
print(Color.RED == Color.BLUE)

Slå upp med värde

Anropa enum-klassen med ett värde för att hämta den matchande medlemmen. Ett okänt värde utlöser 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)

Slå upp med namn

Använd hakparenteser med strängen som innehåller medlemsnamnet för att slå upp en medlem med namn. Det är praktiskt när Ni läser namn från konfiguration eller användarinmatning.

from enum import Enum

class Color(Enum):
    RED = 1
    GREEN = 2

print(Color['GREEN'])

Iterera över medlemmar

En enum kan itereras över. En loop ger varje medlem i den ordning de definierades, vilket passar utmärkt för att bygga menyer eller validera alternativ.

from enum import Enum

class Color(Enum):
    RED = 1
    GREEN = 2
    BLUE = 3

for c in Color:
    print(c.name, c.value)

Strängvärden

Enum-värden är inte begränsade till heltal. Strängar är vanliga, särskilt för värden som ska serialiseras eller lagras.

from enum import Enum

class Status(Enum):
    ACTIVE = 'active'
    PAUSED = 'paused'
    CLOSED = 'closed'

print(Status.PAUSED.value)
print(Status('closed'))

auto() för värden

När de faktiska talen inte spelar någon roll använder Ni auto() för att tilldela värden automatiskt, med början på 1 och sedan uppåt.

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 i funktioner

Om Ni använder enum-värden som funktionsparametrar blir avsikten tydlig och ogiltig indata förhindras. Jämför medlemmarna direkt i logiken.

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))

Medlemmar i en dictionary

Enum-medlemmar är hashbara, så de kan användas som nycklar i en dictionary. Det är ett tydligt sätt att koppla data till varje namngiven konstant.

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])

Snabb kontroll

Hur jämför Ni korrekt två enum-medlemmar med avseende på identitet?

Sammanfattning

Ni har lärt Er att definiera namngivna konstantgrupper med Enum.

  • Medlemmar har .name och .value.
  • Slå upp med värde med Color(v) och med namn med Color['NAME'].
  • Enum-värden kan itereras över och medlemmarna är singleton-objekt.
  • Använd auto() när de exakta värdena inte spelar någon roll.
Gratis att börja

Lär dig Python med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
76
Lektioner
320

Vanliga frågor

Är lektionen ”Enum-klassen” gratis?

Ja – hela texten till ”Enum-klassen” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Python Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i Python Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Enum-klassen”?

Definiera grupper av namngivna konstanter Ni övar på Python Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Python Academy?

Du behöver inga förkunskaper. Utbildningen i Python Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.

Hur lång tid tar lektionen ”Enum-klassen”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Python Academy-lektionen?

Ja. Varje Python Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Enum-klassen
  2. IntEnum och Flag
  3. Grunderna i NamedTuple
  4. typing.NamedTuple
← Tillbaka till Python Academy