Entrée d'hier présente les nouvelles fonctionnalités de Python 3.4 qui ont démarré. Aujourd'hui, c'est Enum.
C'est une fonctionnalité que j'ai toujours voulue, donc j'en suis content. Dans le cas de Python, Enum n'est pas un type mais une classe, et est une image définie comme une variable de classe d'une classe qui hérite d'une paire nom / valeur.
À titre d'exemple, utilisez la combinaison de cartes présentée dans Enumeration (Wikipedia). .. D'abord de la définition.
from enum import Enum
class Cardsuit(Enum):
CLUBS = 1
DIAMONDS = 2
HEARTS = 3
SPADES = 4
Et lors de son utilisation, instanciez la valeur en tant qu'argument ou récupérez l'attribut de classe en utilisant le nom comme clé.
#La même valeur est attribuée à tous les éléments suivants
card0 = Cardsuit(2)
card1 = Cardsuit['DIAMONDS']
card2 = Cardsuit.DIAMONDS
#Lorsqu'il est imprimé normalement, il est sorti dans le format final
print(card0, card1, card2) # -> Cardsuit.DIAMONDS Cardsuit.DIAMONDS Cardsuit.DIAMONDS
#Le nom et la valeur peuvent être récupérés séparément
print(card0.name, card0.value) # -> DIAMONDS 2
De plus, Enum of Python est --Assignez différentes valeurs au même nom ... NG --Assignez la même valeur à un nom différent ... OK
Cependant, si vous utilisez Enum.unique, vous pouvez également NG le second.
from enum import Enum
#C'est acceptable
class Cardsuit(Enum):
CLUBS = 1
DIAMONDS = 2
HEARTS = 3
SPADES = 4
ALT_SPADES = 4
#C'est NG
@unique
class Cardsuit(Enum):
CLUBS = 1
DIAMONDS = 2
HEARTS = 3
SPADES = 4
ALT_SPADES = 4
J'ai été un peu surpris qu'Enum soit une classe, mais c'est peut-être le cas. Par exemple, la définition du code d'erreur est une paire nom / valeur, et des méthodes y sont ajoutées si nécessaire. Je me demande si cela deviendra plus clair si je fais un codage un peu plus réel.
Recommended Posts