Cómo crear enums en Python

Cómo crear enums en Python
Este artículo cubrirá una guía sobre el uso de objetos "enum" en Python. Una clase enum o una "enumeración" le permite crear constantes únicas cuyo valor permanece sin cambios en los programas y aplicaciones de Python. Todas las muestras de código en este artículo se prueban con Python 3.9.5 en Ubuntu 21.04.

Acerca de Python Enums

Como se indicó anteriormente, los enums son objetos que tienen valores constantes. Tienen nombres simbólicos o representativos adjuntos a sus respectivos valores. Son de manera similar a otras variables de Python, pero vienen con algunas características únicas como objetos y agrupaciones de tipo tipo. En Python, los enums siempre se representan utilizando caracteres de mayúsculas para indicar que tienen valores constantes. Los enums son especialmente útiles en los casos en que tiene un rango predefinido de valores posibles y debe elegir y consultar opciones limitadas en la lógica de su programa. El uso de enumeros en Python se puede entender mejor a través de ejemplos. Algunos de ellos se explican a continuación.

Creando enumeros

Puede crear enums construyendo una nueva clase que herede la clase enumera misma. Eche un vistazo a la muestra de código a continuación:

de enum import enum
Color de clase (enum):
Amarillo = 1
Negro = 2
Blanco = 3
Morado = 4
Naranja = 5
Imprimir (color (1))
Imprimir (RepR (Color (1)))
imprimir (color.AMARILLO)
Imprimir (tipo (color.AMARILLO))
imprimir (color.AMARILLO.nombre)
imprimir (color.AMARILLO.valor)

La primera declaración importa la clase Enum desde el módulo enum. A continuación, una nueva clase llamada "Color" se construye heredando la clase enum. Se crean algunas variables (miembros de enum) con valores constantes. Estas variables representan cinco opciones posibles. Las siguientes declaraciones de impresión muestran cómo puede acceder a estos enumines, sus nombres y valores. Estas declaraciones se explican por sí mismas. Para acceder a una posible opción de enum, puede usar la notación de puntos o suministrar un valor conocido como argumento a la clase. Después de ejecutar la muestra de código anterior, debe obtener la siguiente salida:

Color.AMARILLO
Color.AMARILLO
AMARILLO
1

Como puede ver en la salida, hay una variedad de formas en que puede acceder a los miembros de ENUM. Tenga en cuenta que llamar a la función de impresión en un enum devolverá su formulario de cadena legible por humanos y no su valor. Entonces referirme al color.El amarillo volverá el color.Amarillo y no 1.

Iterando a través de Enums

Puede iterar a través de un objeto de tipo enum y obtener sus miembros utilizando declaraciones de bucle.

de enum import enum
Color de clase (enum):
Amarillo = 1
Negro = 2
Blanco = 3
Morado = 4
Naranja = 5
para C en color:
Imprimir (C.Nombre, C.valor)

Usando la variable "C", puede acceder a cada miembro del objeto Color Enum Tipo. Después de ejecutar la muestra de código anterior, debe obtener la siguiente salida.

Amarillo 1
Negro 2
Blanco 3
Púrpura 4
Naranja 5

El nombre de los miembros de ENUM debe ser único, pero se permiten valores duplicados

No puede crear dos miembros de ENUM con el mismo nombre, pero sus valores no tienen tales restricciones. La siguiente muestra de código lanzará un error, ya que hay dos miembros de ENUM con los mismos nombres.

de enum import enum
Color de clase (enum):
Negro = 1
Negro = 2
Blanco = 3
Morado = 4
Naranja = 5

Después de ejecutar la muestra de código anterior, debe recibir un error similar a este:

Archivo "/usr/lib/python3.9/enum.py ", línea 133, en __setItem__
elevar typeError ('intentó reutilizar la clave: % r' % clave)
TypeError: intentó reutilizar la tecla: 'negro'

Como puede ver en la salida, los nombres duplicados no están permitidos para los miembros de ENUM. Sin embargo, el siguiente código es válido donde dos miembros de ENUM tienen los mismos valores.

de enum import enum
Color de clase (enum):
Amarillo = 2
Negro = 2
Blanco = 3
Morado = 4
Naranja = 5

Si también desea forzar valores únicos para los miembros de ENUM junto con sus nombres, puede usar el decorador "único" para evitar valores duplicados.

de enum import enum, único
@único
Color de clase (enum):
Amarillo = 2
Negro = 2
Blanco = 3
Morado = 4
Naranja = 5

El decorador "@unique" obliga a los objetos de tipo enum para lanzar un error cuando hay valores duplicados asignados a los miembros de Enum. Después de ejecutar la muestra de código anterior, debe obtener la siguiente salida:

Archivo "/usr/lib/python3.9/enum.py ", línea 989, en un único
Aumentar ValueError ('Valores duplicados encontrados en %R: %S' %
ValueError: valores duplicados encontrados en: negro -> amarillo

Auto asignar valores a los miembros de ENUM

Si los valores de los miembros de ENUM no le importan, puede usar el método "Auto" disponible en el módulo ENUM para asignar automáticamente números secuenciales a los miembros de ENUM.

de Enum import enum, auto
Color de clase (enum):
Amarillo = auto ()
Black = Auto ()
White = Auto ()
Púrpura = auto ()
Naranja = auto ()
para C en color:
Imprimir (C.Nombre, C.valor)

Como puede ver en la muestra de código aboved, en lugar de asignar explícitamente algunos valores a los miembros de ENUM, se ha llamado a la función automática al crear cada miembro. El método automático siempre asigna 1 como el primer valor. Después de ejecutar la muestra de código anterior, debe obtener la siguiente salida:

Amarillo 1
Negro 2
Blanco 3
Púrpura 4
Naranja 5

Conclusión

Los objetos de tipo enums en Python le permiten crear variables de estilo constantes que tengan nombres únicos. Estas variables, generalmente llamadas miembros de ENUM, pueden estar representadas por cadenas legibles por humanos. Los enums son especialmente útiles cuando desea elegir una o más opciones de un grupo de opciones limitadas.