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 = 3
Linguagem 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 enum
mó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
Enum
eauto
doenum
módulo. - Segundo, chame o
auto()
para gerar um valor exclusivo para cada membro daState
enumeraçã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 State
membros 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 3
Linguagem 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 membrostart
é 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 rejected
Linguagem de código: Python ( python )
Resumo
- Use
auto()
a classe enum para gerar valores exclusivos para membros de enumeração.