Está en la página 1de 15

1.

ENUM

1
Una enumeración es un conjunto de nombres simbólicos
(miembros) vinculados a valores únicos y constantes. Dentro
de una enumeración, los miembros se pueden comparar por
identidad, y la enumeración en sí se puede repetir.

2
Este módulo define cuatro clases de enumeración que se
pueden usar para definir conjuntos únicos de nombres y
valores: Enum, IntEnum, Flag e IntFlag.

3

clase enum. clase enum.Flag
Clase base para crear constantes Clase base para crear constantes
enumeradas. enumeradas que se pueden comb
clase enum.IntEnum utilizando las operaciones bit a bit
perder su pertenencia a Flag.
Clase base para crear constantes
enumeradas que también son
subclases de int.
clase enum.IntFlag
Clase base para crear constantes
enumeradas que se pueden combinar
utilizando los operadores bit a bit sin
perder su membresía IntFlag. Los
miembros de IntFlag también son
subclases de int. 4
Crear una enumeración
Las enumeraciones se crean utilizando la sintaxis de clase, lo
que las hace fáciles de leer y escribir. Para definir una
enumeración, subclase Enum de la siguiente manera:

from enum import Enum


class Color(Enum):
RED = 1
GREEN = 2
BLUE = 3

5

Los valores de los miembros
pueden ser cualquier cosa: int,
str, etc.

6
Nomenclatura

✘ La clase Color es una enumeración


✘ Los atributos Color.RED, Color.GREEN, etc., son miembros
de enumeración y son funcionalmente constantes.
✘ Los miembros de la enumeración tienen nombres y valores
(el nombre de Color.RED es RED, el valor de Color.BLUE es
3, etc.)

7
Las enumeraciones admiten la iteración, en orden de
definición:
class Shake(Enum):
VANILLA = 7
CHOCOLATE = 4
COOKIES = 9
MINT = 3
for shake in Shake:
print(shake)

8
Los miembros de enumeración son hashable, por lo que
pueden usarse en diccionario:
apples = {}
apples[Color.RED] = 'red delicious'
apples[Color.GREEN] = 'granny smith'
apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True

9
Duplicating enum members and
values
Tener dos miembros enum con el mismo nombre no es válido:

>>> class Shape(Enum):


... SQUARE = 2
... SQUARE = 3
...
Traceback (most recent call last):
...
TypeError: Attempted to reuse key: 'SQUARE'

10
Duplicating enum members and
values
Sin embargo, dos miembros enum pueden tener el mismo valor. Dados los dos miembros A y B
con el mismo valor (y A definido primero), B es un alias de A. La búsqueda por valor del valor de
A y B devolverá A. La búsqueda por nombre de B también devolverá A:

>>> class Shape(Enum):


... SQUARE = 2
... DIAMOND = 1
... CIRCLE = 3
... ALIAS_FOR_SQUARE = 2
...
>>> Shape.SQUARE
<Shape.SQUARE: 2>
>>> Shape.ALIAS_FOR_SQUARE
<Shape.SQUARE: 2>
>>> Shape(2)
<Shape.SQUARE: 2> 11
Garantizar valores de enumeración
únicos
Por defecto, las enumeraciones permiten múltiples nombres como alias para el
mismo valor. Cuando no se desea este comportamiento, se puede usar lo
siguiente para garantizar que cada valor se use solo una vez en la enumeración:

>>> from enum import Enum, unique


>>> @unique
... class Mistake(Enum):
... ONE = 1
... TWO = 2
... THREE = 3
... FOUR = 3
...
Traceback (most recent call last):
...
ValueError: duplicate values found in <enum 'Mistake'>:
FOUR -> THREE 12

Usando valores
automáticos

13
>>> from enum import Enum, auto
>>> class Color(Enum):
... RED = auto()
... BLUE = auto()
... GREEN = auto()
...
>>> list(Color)
[<Color.RED: 1>, <Color.BLUE: 2>, <Color.GREEN: 3>]

14
Vamos a la
practica!

15