Come creare enum in Python

Come creare enum in Python
Questo articolo coprirà una guida sull'uso degli oggetti "enum" in Python. Una classe Enum o una "enumerazione" consente di creare costanti uniche il cui valore rimane invariato nei programmi e nelle applicazioni Python. Tutti i campioni di codice in questo articolo sono testati con Python 3.9.5 su Ubuntu 21.04.

A proposito di Python Enums

Come affermato in precedenza, gli enum sono oggetti con valori costanti. Hanno nomi simbolici o rappresentativi legati ai rispettivi valori. Sono in un modo simile ad altre variabili Python, ma sono dotati di alcune caratteristiche uniche come oggetti e raggruppamento. In Python, gli enum sono sempre rappresentati usando caratteri maiuscole per indicare che hanno valori costanti. Gli enum sono particolarmente utili nei casi in cui si dispone di una gamma predefinita di valori possibili e devi scegliere e fare riferimento a scelte limitate nella logica del programma. L'uso di Enums in Python può essere meglio compreso attraverso esempi. Alcuni di loro sono spiegati di seguito.

Creazione di enum

Puoi creare enum costruendo una nuova classe che eredita la classe enum stessa. Dai un'occhiata al campione del codice di seguito:

da enum import enum
Colore di classe (enum):
Giallo = 1
Nero = 2
Bianco = 3
Viola = 4
Arancione = 5
Stampa (colore (1))
Stampa (Rep (Color (1)))
Stampa (colore.GIALLO)
Stampa (tipo (colore.GIALLO))
Stampa (colore.GIALLO.nome)
Stampa (colore.GIALLO.valore)

La prima istruzione importa la classe Enum dal modulo Enum. Successivamente una nuova classe chiamata "Color" è costruita ereditando la classe Enum. Alcune variabili (membri enum) vengono quindi create con valori costanti. Queste variabili rappresentano cinque possibili scelte. Le prossime dichiarazioni di stampa mostrano come è possibile accedere a questi enum, ai loro nomi e valori. Queste dichiarazioni sono autoesplicative. Per accedere a una possibile scelta enum, è possibile utilizzare la notazione punto o fornire un valore noto come argomento alla classe. Dopo aver eseguito il campione di codice sopra, è necessario ottenere il seguente output:

Colore.GIALLO
Colore.GIALLO
GIALLO
1

Come puoi vedere nell'output, ci sono vari modi in cui puoi accedere ai membri ENUM. Si noti che la funzione di stampa di chiamata su un enum restituirà il suo modulo di stringa leggibile umano e non il suo valore. Quindi riferendosi al colore.Il giallo restituirà il colore.Giallo e non 1.

Iteratura attraverso Enums

È possibile iterare attraverso un oggetto di tipo enum e ottenere i suoi membri utilizzando le dichiarazioni di loop.

da enum import enum
Colore di classe (enum):
Giallo = 1
Nero = 2
Bianco = 3
Viola = 4
Arancione = 5
Per C di colore:
Stampa (c.nome, c.valore)

Utilizzando la variabile "C", è possibile accedere a ogni membro dell'oggetto TIPO ENUM COLORE. Dopo aver eseguito il campione di codice sopra, è necessario ottenere il seguente output.

Giallo 1
Nero 2
Bianco 3
Viola 4
Arancia 5

Il nome dei membri enum deve essere univoco ma sono consentiti valori duplicati

Non è possibile creare due membri ENUM con lo stesso nome, ma i loro valori non hanno tali restrizioni. Il seguente campione di codice lancerà un errore in quanto vi sono due membri enum con gli stessi nomi.

da enum import enum
Colore di classe (enum):
Nero = 1
Nero = 2
Bianco = 3
Viola = 4
Arancione = 5

Dopo aver eseguito il campione di codice sopra, è necessario ottenere un errore simile a questo:

File "/usr/lib/python3.9/enum.py ", riga 133, in __setitem__
Aumenta TypeEerror ("Tentativo di riutilizzare la chiave: % r ' % chiave)
TAYEERROR: Tentativo di riutilizzare la chiave: "Black"

Come puoi vedere nell'output, i nomi duplicati non sono consentiti per i membri ENUM. Tuttavia, il seguente codice è valido in cui due membri ENUM hanno gli stessi valori.

da enum import enum
Colore di classe (enum):
Giallo = 2
Nero = 2
Bianco = 3
Viola = 4
Arancione = 5

Se vuoi anche forzare i valori unici per i membri ENUM insieme ai loro nomi, puoi usare un decoratore "unico" per prevenire valori duplicati.

da enum import enum, unico
@unico
Colore di classe (enum):
Giallo = 2
Nero = 2
Bianco = 3
Viola = 4
Arancione = 5

Il decoratore "@Unique" costringe il tipo di tipo ENUM a lanciare un errore quando ci sono valori duplicati assegnati ai membri ENUM. Dopo aver eseguito il campione di codice sopra, è necessario ottenere il seguente output:

File "/usr/lib/python3.9/enum.py ", linea 989, in unico
Aumenta ValueRror ('Valori duplicati riscontrati in %R: %S' %
ValueRror: valori duplicati trovati in: nero -> giallo

Auto Assegna i valori ai membri ENUM

Se i valori dei membri ENUM non contano, è possibile utilizzare il metodo "Auto" disponibile nel modulo Enum per assegnare automaticamente numeri sequenziali ai membri ENUM.

da enum import enum, auto
Colore di classe (enum):
Giallo = auto ()
Nero = auto ()
Bianco = auto ()
Viola = auto ()
Orange = Auto ()
Per C di colore:
Stampa (c.nome, c.valore)

Come puoi vedere nel campione di codice Aboved, invece di assegnare esplicitamente alcuni valori ai membri ENUM, la funzione automatica è stata chiamata durante la creazione di ciascun membro. Il metodo automatico assegna sempre 1 come primo valore. Dopo aver eseguito il campione di codice sopra, è necessario ottenere il seguente output:

Giallo 1
Nero 2
Bianco 3
Viola 4
Arancia 5

Conclusione

Enums digita oggetti in python consente di creare variabili di stile costante con nomi univoci. Queste variabili, solitamente chiamate membri enum, possono essere rappresentate da stringhe leggibili umane. Gli enum sono particolarmente utili quando si desidera scegliere una o più scelte da un gruppo di opzioni limitate.