Enumerazioni in Python

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.

YouTube Video