Enumerazioni in Python
Questo articolo spiega le enumerazioni in Python.
YouTube Video
Enumerazioni in Python
enum
di Python è una classe speciale per definire costanti, migliorare la leggibilità e aiutare a prevenire errori di codifica.
Che cos'è un Enum
?
Enum
(abbreviazione di enumerazione) è una classe utilizzata per definire un insieme di costanti nominate. È tipicamente utilizzato per raggruppare costanti correlate. Ad esempio, è adatto per rappresentare colori, giorni della settimana o direzioni.
Perché usare Enum
?
Ci sono diversi motivi per utilizzare Enum
.
- Migliorata leggibilità: L'uso di costanti nominate rende il codice più intuitivo.
- Prevenzione di errori: Previene modifiche o utilizzi errati dei valori costanti.
- Raggruppamento: Organizza costanti correlate in una singola classe, rappresentando dati strutturati.
Utilizzo base di Enum
Per usare enum
, importa il modulo enum
e definisci una classe. La classe dovrebbe ereditare da Enum
e definire i valori che vuoi trattare come costanti.
Esempio base di 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
In questo esempio, definiamo una classe Enum
chiamata Color
con tre valori. Ogni nome può essere accessibile attraverso l'attributo name
, e il valore associato attraverso l'attributo value
.
Confrontare Enums
I membri di Enum
possono essere confrontati sia per nome che per valore. Puoi utilizzare l'operatore is
o l'operatore ==
per verificare identità ed uguaglianza.
Esempio di confronto
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
Qui vengono dimostrati i confronti di Enum
usando ==
e is
. Enum
è progettato per confrontare correttamente oggetti con gli stessi nomi e valori.
Assegnazione automatica dei valori con auto()
Se vuoi assegnare automaticamente valori ai membri di Enum
, puoi utilizzare enum.auto()
. auto()
consente a Python di assegnare valori automaticamente, eliminando la necessità di specificarli manualmente da parte degli sviluppatori.
Esempio di 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
In questo esempio, l'uso di auto()
elimina la necessità di specificare esplicitamente i valori, rendendo il codice più conciso.
Assegnare valori multipli ai membri di Enum
I membri di Enum
possono contenere anche valori multipli, come tuple. Questo consente a ciascun membro di contenere ulteriori informazioni correlate.
Esempio con l'uso di tuple
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
In questo esempio, i membri della classe Status
hanno ciascuno due valori, che rappresentano lo stato e la descrizione. Questo è utile quando si desidera associare più informazioni a un membro di Enum
.
Utilizzo di Enum
come flag
L'enum
di Python include una classe Flag
che può essere utilizzata come flag bit. L'uso di Flag
ti consente di gestire più stati in combinazione.
Esempio di 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
In questo esempio, le operazioni bitwise vengono utilizzate per combinare più permessi. L'uso di Flag
consente di gestire più stati in modo conciso.
Punti da considerare quando si utilizza Enum
Immutabilità di Enum
I membri di Enum
sono immutabili. Una volta definiti, i loro nomi o valori non possono essere modificati. Questa è una caratteristica importante per mantenere la coerenza come costanti.
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.
Divieto di membri duplicati
I membri di Enum
devono avere nomi e valori univoci. Anche quando i valori duplicati sono ammessi, Python dà automaticamente priorità al primo membro.
Riepilogo
Il modulo enum
di Python è uno strumento estremamente utile per raggruppare insiemi di costanti, migliorare la leggibilità e mantenere la coerenza nel codice. Una varietà di usi è possibile, dall'uso di base all'assegnazione automatica dei valori tramite auto()
, oltre all'utilizzo come flag di bit.
Comprendere e padroneggiare correttamente enum
può migliorare la qualità del codice e aiutare a prevenire errori.
Puoi seguire l'articolo sopra utilizzando Visual Studio Code sul nostro canale YouTube. Controlla anche il nostro canale YouTube.