Uppräkningar i Python

Uppräkningar i Python

Den här artikeln förklarar uppräkningar i Python.

YouTube Video

Uppräkningar i Python

enum i Python är en speciell klass för att definiera konstanter, förbättra läsbarheten och hjälpa till att förhindra kodningsfel.

Vad är en Enum?

Enum (kort för uppräkning) är en klass som används för att definiera en uppsättning namngivna konstanter. Den används vanligtvis för att gruppera relaterade konstanter tillsammans. Till exempel är den lämplig för att representera färger, veckodagar eller riktningar.

Varför använda Enum?

Det finns flera anledningar att använda Enum.

  • Förbättrad läsbarhet: Att använda namngivna konstanter gör koden mer intuitiv.
  • Förebyggande av buggar: Det förhindrar förändringar eller felaktigt användande av konstantvärden.
  • Gruppering: Det organiserar relaterade konstanter i en enda klass, vilket representerar strukturerad data.

Grundläggande användning av Enum

För att använda enum, importera enum-modulen och definiera en klass. Klassen ska ärva från Enum och definiera de värden du vill behandla som konstanter.

Grundläggande exempel på Enum

 1from enum import Enum
 2
 3class Color(Enum):
 4    RED = 1
 5    GREEN = 2
 6    BLUE = 3
 7
 8# Usage of Enum
 9print(Color.RED)        # Color.RED
10print(Color.RED.name)   # RED
11print(Color.RED.value)  # 1

I det här exemplet definierar vi en Enum-klass som heter Color med tre värden. Varje namn kan nås via attributet name, och dess associerade värde kan nås via attributet value.

Jämförelse av Enums

Enum-medlemmar kan jämföras antingen med namn eller med värde. Du kan använda operatorn is eller operatorn == för att kontrollera identitet och likhet.

Exempel på jämförelse

 1from enum import Enum
 2
 3class Direction(Enum):
 4    NORTH = 1
 5    SOUTH = 2
 6    EAST = 3
 7    WEST = 4
 8
 9# Equality comparison
10print(Direction.NORTH == Direction.SOUTH)  # False
11print(Direction.NORTH == Direction.NORTH)  # True
12
13# Identity comparison using is
14print(Direction.NORTH is Direction.SOUTH)  # False
15print(Direction.NORTH is Direction.NORTH)  # True

Här demonstreras jämförelser av Enum med == och is. Enum är utformad för att korrekt jämföra objekt med samma namn och värden.

Automatisk värdetilldelning med auto()

Om du vill tilldela värden automatiskt till Enum-medlemmar kan du använda enum.auto(). auto() gör det möjligt för Python att tilldela värden automatiskt, vilket eliminerar behovet av manuell specifikation av utvecklare.

Exempel på auto()

 1from enum import Enum, auto
 2
 3class Animal(Enum):
 4    DOG = auto()
 5    CAT = auto()
 6    MOUSE = auto()
 7
 8# Check the values of Enum
 9print(Animal.DOG.value)    # 1
10print(Animal.CAT.value)    # 2
11print(Animal.MOUSE.value)  # 3

I det här exemplet tar användningen av auto() bort behovet av att uttryckligen ange värden, vilket gör koden mer koncis.

Tilldela flera värden till Enum-medlemmar

Enum-medlemmar kan också hålla flera värden, såsom tuples. Detta gör det möjligt för varje medlem att hålla ytterligare relaterad information.

Exempel med tuples

 1from enum import Enum
 2
 3class Status(Enum):
 4    ACTIVE = (1, 'Active user')
 5    INACTIVE = (2, 'Inactive user')
 6    SUSPENDED = (3, 'Suspended user')
 7
 8# Accessing Enum members
 9print(Status.ACTIVE.name)    # ACTIVE
10print(Status.ACTIVE.value)   # (1, 'Active user')
11print(Status.ACTIVE.value[1])  # Active user

I det här exemplet har medlemmarna i Status-klassen två värden vardera, som representerar tillstånd och beskrivning. Detta är användbart när du vill associera flera delar av information med en Enum-medlem.

Använda Enum som flaggor

Pythons enum inkluderar en Flag-klass som kan användas som bitflaggor. Användning av Flag låter dig hantera flera tillstånd i kombination.

Exempel på Flag

 1from enum import Flag, auto
 2
 3class Permission(Flag):
 4    READ = auto()
 5    WRITE = auto()
 6    EXECUTE = auto()
 7
 8# Combining flags
 9permission = Permission.READ | Permission.WRITE
10print(permission)                 # Permission.READ|WRITE
11print(Permission.EXECUTE in permission)  # False

I det här exemplet används bitvisa operationer för att kombinera flera behörigheter. Användning av Flag låter dig hantera flera tillstånd kortfattat.

Saker att tänka på när du använder Enum

Omuterbarhet hos Enum

Enum-medlemmar är omuterbara. När de väl är definierade kan deras namn eller värden inte ändras. Detta är en viktig egenskap för att bibehålla konsekvens som konstanter.

1from enum import Enum
2
3class Days(Enum):
4    MONDAY = 1
5    TUESDAY = 2
6
7# Example of immutability
8# Days.MONDAY = 3  # AttributeError: Cannot reassign members.

Förbud mot dubblettmedlemmar

Enum-medlemmar måste ha unika namn och värden. Även när dubbla värden är tillåtna prioriterar Python automatiskt den första medlemmen.

Sammanfattning

Pythons enum-modul är ett mycket användbart verktyg för att gruppera uppsättningar av konstanter, förbättra läsbarheten och upprätthålla kodens konsekvens. Ett flertal användningsområden är möjliga, från grundläggande användning till automatisk värdetilldelning med auto() samt användning som bitflaggor.

Att förstå och behärska enum ordentligt kan förbättra kodkvaliteten och hjälpa till att förebygga fel.

Du kan följa med i artikeln ovan med hjälp av Visual Studio Code på vår YouTube-kanal. Vänligen kolla även in YouTube-kanalen.

YouTube Video