Como criar enums em Python

Como criar enums em Python
Este artigo abordará um guia sobre o uso de objetos "enum" em Python. Um enumeração ou uma classe de "enumeração" permite criar constantes exclusivas cujo valor permanece inalterado em programas e aplicativos Python. Todas as amostras de código deste artigo são testadas com Python 3.9.5 no Ubuntu 21.04.

Sobre enumes em Python

Como afirmado anteriormente, enumes são objetos com valores constantes. Eles têm nomes simbólicos ou representativos anexados aos seus respectivos valores. Eles são de uma maneira semelhante a outras variáveis ​​Python, mas vêm com alguns recursos exclusivos, como objetos e agrupamento seguros para tipos. No Python, as enumes são sempre representadas usando caracteres de caixa superior para indicar que eles têm valores constantes. Enums são especialmente úteis nos casos quando você tem uma gama predefinida de valores possíveis e precisa escolher e se referir a opções limitadas na lógica do seu programa. O uso de enums em python pode ser melhor compreendido através de exemplos. Alguns deles são explicados abaixo.

Criando enums

Você pode criar enums construindo uma nova classe que herda a própria classe Enum. Dê uma olhada no exemplo de código abaixo:

de enum importar enum
Cor da classe (enum):
Amarelo = 1
Preto = 2
Branco = 3
Roxo = 4
Laranja = 5
Imprimir (cor (1))
Imprimir (repr (cor (1)))
Imprimir (cor.AMARELO)
Imprimir (tipo (cor.AMARELO))
Imprimir (cor.AMARELO.nome)
Imprimir (cor.AMARELO.valor)

A primeira declaração importa a classe Enum do módulo Enum. Em seguida, uma nova aula chamada "Color" é construída herdando a aula de enum. Algumas variáveis ​​(membros da enum) são criadas com valores constantes. Essas variáveis ​​representam cinco opções possíveis. As próximas declarações de impressão mostram como você pode acessar esses enumes, seus nomes e valores. Essas declarações são auto -explicativas. Para acessar uma possível escolha de enum, você pode usar a notação de pontos ou fornecer um valor conhecido como um argumento para a classe. Depois de executar a amostra de código acima, você deve obter a seguinte saída:

Cor.AMARELO
Cor.AMARELO
AMARELO
1

Como você pode ver na saída, há várias maneiras de acessar os membros da enum. Observe que a função de impressão de chamada em uma enume. Então, referindo -se à cor.Amarelo retornará a cor.Amarelo e não 1.

Iterando através de enums

Você pode iterar através de um objeto do tipo enum e obter seus membros usando declarações de loop.

de enum importar enum
Cor da classe (enum):
Amarelo = 1
Preto = 2
Branco = 3
Roxo = 4
Laranja = 5
para C em cor:
impressão (c.nome, c.valor)

Usando a variável "C", você pode acessar todos os membros do objeto de tipo de enum cor. Depois de executar a amostra de código acima, você deve obter a seguinte saída.

Amarelo 1
Preto 2
Branco 3
Roxo 4
Laranja 5

Os membros do nome dos enum devem ser únicos, mas valores duplicados são permitidos

Você não pode criar dois membros enum com o mesmo nome, mas seus valores não têm essas restrições. A amostra de código a seguir lançará um erro, pois há dois membros da enum com os mesmos nomes.

de enum importar enum
Cor da classe (enum):
Preto = 1
Preto = 2
Branco = 3
Roxo = 4
Laranja = 5

Depois de executar o exemplo de código acima, você deve obter um erro semelhante a isso:

Arquivo "/usr/lib/python3.9/enum.py ", linha 133, em __setItem__
Raise TypeError ('tentou reutilizar a chave: % r' % key)
TypeError: Tentativa de reutilizar a chave: 'Black'

Como você pode ver na saída, nomes duplicados não são permitidos para membros da enum. No entanto, o código a seguir é válido onde dois membros da enum têm os mesmos valores.

de enum importar enum
Cor da classe (enum):
Amarelo = 2
Preto = 2
Branco = 3
Roxo = 4
Laranja = 5

Se você também deseja forçar valores únicos para membros da enum junto com seus nomes, você pode usar o decorador "exclusivo" para evitar valores duplicados.

de enum importar enum, exclusivo
@exclusivo
Cor da classe (enum):
Amarelo = 2
Preto = 2
Branco = 3
Roxo = 4
Laranja = 5

O decorador “@Unique” forças de enum objetos do tipo de enum para causar um erro quando houver valores duplicados atribuídos aos membros da enum. Depois de executar a amostra de código acima, você deve obter a seguinte saída:

Arquivo "/usr/lib/python3.9/enum.py ", linha 989, em único
Raise ValueError ('valores duplicados encontrados em %r: %s' %
ValueError: valores duplicados encontrados em: preto -> amarelo

Atribuir automaticamente valores aos membros da enum

Se os valores dos membros da enum não importam para você, você poderá usar o método "automático" disponível no módulo Enum para atribuir automaticamente números seqüenciais aos membros da enum.

de enum importar enum, automático
Cor da classe (enum):
Amarelo = Auto ()
Black = Auto ()
Branco = auto ()
Roxo = auto ()
Orange = Auto ()
para C em cor:
impressão (c.nome, c.valor)

Como você pode ver na amostra de código abodada, em vez de atribuir explicitamente alguns valores aos membros da enum, a função automática foi chamada ao criar cada membro. O método automático sempre atribui 1 como o primeiro valor. Depois de executar a amostra de código acima, você deve obter a seguinte saída:

Amarelo 1
Preto 2
Branco 3
Roxo 4
Laranja 5

Conclusão

Os objetos do tipo enums em Python permitem criar variáveis ​​de estilo constante com nomes únicos. Essas variáveis, geralmente chamadas de membros da enum, podem ser representadas por strings legíveis humanos. Enums são especialmente úteis quando você deseja escolher uma ou mais opções de um grupo de opções limitadas.