J'essayais donc d'utiliser des énumérations en python et je suis tombé sur l'erreur suivante:
Lorsque j'utilisais enum comme tuple et que je lui donnais deux valeurs, je ne peux pas accéder à une seule valeur telle que tuple[0
class Rank(Enum):
ACE = 1
TWO = 2
THREE = 3
FOUR = 4
FIVE = 5
SIX = 6
SEVEN = 7
EIGHT = 8
NINE = 9
TEN = 10
JACK = 11
QUEEN = 12
KING = 13, "King"
print (Rank.KING.value)
et l'impression est
(13, 'Roi')
Comment puis-je accéder à une seule valeur pour pouvoir imprimer 13 ou 'King'?
3 Réponses :
Avec enum.Enum , les noms de variables de classe deviennent eux-mêmes l'attribut name des attributs énumérés de l'instance Enum , vous ne 'pas besoin de faire de KING un tuple de valeur et de nom:
from enum import Enum, DynamicClassAttribute
class MixedCaseEnum(Enum):
@DynamicClassAttribute
def name(self):
return self._name_.title()
class Rank(MixedCaseEnum):
KING = 13
print(Rank.KING.name) # outputs 'King'
print(Rank.KING.value) # outputs 13
Si vous voulez nommer les variables de classe avec des lettres majuscules mais avoir leur nom à des casse mixte, ce qui n'est pas ce pour quoi Enum est conçu, vous devrez sous-classer Enum et remplacer le nom code > méthode vous-même pour personnaliser le comportement:
class Rank(Enum):
King = 13
print(Rank.King.name) # outputs 'King'
print(Rank.King.value) # outputs 13
Vous pouvez simplement utiliser les index comme vous les utiliseriez sur un tableau:
>>> KING = 13, 'King' >>> KING (13, 'King') >>> KING[0] 13 >>> KING[1] 'King' >>>
Vous avez les possibilités suivantes pour accéder à 13 ou "king":
Rank.KING.value[0] Rank.KING.value[1]