Enumeração automática do Python

Resumo : neste tutorial, você aprenderá sobre a função enum auto() para gerar valores exclusivos para membros de enumeração.

Introdução à função enum auto()

O exemplo a seguir define uma enumeração com três membros cujos valores são 1, 2 e 3:

from enum import Enum


class State(Enum):
    PENDING = 1
    FULFILLED = 2
    REJECTED = 3Linguagem de código:  Python  ( python )

Neste exemplo, atribuímos manualmente valores inteiros aos membros da enumeração.

Para torná-lo mais conveniente, o Python 3.6 introduziu a auto()classe auxiliar no enummódulo, que gera automaticamente valores exclusivos para os membros da enumeração. Por exemplo:

from enum import Enum, auto


class State(Enum):
    PENDING = auto()
    FULFILLED = auto()
    REJECTED = auto()

    def __str__(self):
        return f'{self.name(self.value)}'Linguagem de código:  Python  ( python )

Como funciona.

  • Primeiro, importe as classes Enume autodo enummódulo.
  • Segundo, chame o auto()para gerar um valor exclusivo para cada membro da Stateenumeração.

Por padrão, a auto()classe gera uma sequência de números inteiros começando em 1.

O seguinte mostra os valores dos Statemembros da enumeração:

for state in State:
    print(state.name, state.value)Linguagem de código:  Python  ( python )

Saída:

PENDING 1
FULFILLED 2
REJECTED 3Linguagem de código:  Python  ( python )

Como enum() funciona automaticamente

Tecnicamente, auto()chama o _generate_next_value_()método para gerar valores para os membros. Aqui está a sintaxe do _generate_next_value_()método:

_generate_next_value_(name, start, count, last_values)Linguagem de código:  Python  ( python )

O _generate_next_value_()possui os seguintes parâmetros:

  • nameé o nome do membro
  • starté o valor inicial dos membros enum.
  • counté o número de membros do enum, incluindo aliases , que foram criados.
  • last_valuesé uma lista de todos os valores anteriores usados ​​para os membros enum.

Por padrão, _generate_next_value_()gera o próximo número em uma sequência de inteiros começando em um. No entanto, o Python pode mudar essa lógica no futuro.

É possível substituir o _generate_next_value_()método para adicionar uma lógica personalizada que gere valores exclusivos. Nesse caso, você precisa colocar o _generate_next_value_()método antes de definir todos os membros.

Veja a seguir como substituir o _generate_next_value_()método para gerar valores para membros usando seus nomes:

from enum import Enum, auto


class State(Enum):
    def _generate_next_value_(name, start, count, last_values):
        return name.lower()

    PENDING = auto()
    FULFILLED = auto()
    REJECTED = auto()


for state in State:
    print(state.name, state.value)Linguagem de código:  Python  ( python )

Saída:

PENDING pending
FULFILLED fulfilled
REJECTED rejectedLinguagem de código:  Python  ( python )

Resumo

  • Use auto()a classe enum para gerar valores exclusivos para membros de enumeração.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *