5
votes

tuple et énumération python

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'?


0 commentaires

3 Réponses :


7
votes

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


0 commentaires

1
votes

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'
>>> 


0 commentaires

3
votes

Vous avez les possibilités suivantes pour accéder à 13 ou "king":

Rank.KING.value[0]
Rank.KING.value[1]


0 commentaires