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]