Maison >développement back-end >Tutoriel Python >Explication détaillée des types d'énumération en Python (exemples de code)
Cet article vous apporte une explication détaillée (exemple de code) des types d'énumération en Python. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.
Les types natifs de Python n’incluent pas les types d’énumération. Pour fournir une meilleure solution, Python a ajouté la bibliothèque standard enum dans la version 3.4 via PEP 435.
Le type d'énumération peut être considéré comme une étiquette ou une collection de constantes, généralement utilisées pour représenter certaines collections limitées, telles que les jours de la semaine, les mois, le statut, etc. Que faisons-nous lorsqu'il n'y a pas de type d'énumération spécialement fourni ? Généralement, il est implémenté via un dictionnaire ou une classe :
Color = { 'RED' : 1, 'GREEN': 2, 'BLUE' : 3, } class Color: RED = 1 GREEN = 2 BLUE = 3
Cette façon d'implémenter l'énumération ne pose bien sûr aucun problème si elle est utilisée avec précaution. tout, c'est une solution de compromis. Le danger est qu'il puisse être modifié.
Utiliser Enum
Une meilleure façon est d'utiliser le type Enum
fourni par la bibliothèque standard. La bibliothèque officielle est digne de confiance. Les versions antérieures à 3.4 peuvent également télécharger les bibliothèques prises en charge via pip install enum
. Exemple simple :
from enum import Enum class Color(Enum): red = 1 green = 2 blue = 3
Les membres de l'énumération ont des valeurs (répétables par défaut), les membres de l'énumération ont des représentations sous forme de chaîne conviviales :
>>> print(Color.red) Color.red >>> print(repr(Color.red)) <Color.red: 1> >>> type(Color.red) <Enum 'Color'> >>> isinstance(Color.green, Color) True
Les types d'énumération ne sont pas instanciables, ne peuvent pas être modifiés.
Définir une énumération
Lors de la définition d'une énumération, les noms des membres ne peuvent pas être répétés
class Color(Enum): red = 1 green = 2 red = 3 # TypeError: Attempted to reuse key: 'red'
Valeurs des membres sont autorisés à être les mêmes, deuxième Les noms de chaque membre sont considérés comme des alias du premier membre
class Color(Enum): red = 1 green = 2 blue = 1 print(Color.red) # Color.red print(Color.blue) # Color.red print(Color.red is Color.blue)# True print(Color(1)) # Color.red 在通过值获取枚举成员时,只能获取到第一个成员
Si vous ne pouvez pas définir la même valeur de membre, vous pouvez la décorer avec unique
from enum import Enum, unique @unique class Color(Enum): red = 1 green = 2 blue = 1 # ValueError: duplicate values found in <enum 'Color'>: blue -> red
Valeur d'énumération
Vous pouvez obtenir des membres par nom de membre ou par valeur de membre :
print(Color['red']) # Color.red 通过成员名来获取成员 print(Color(1)) # Color.red 通过成员值来获取成员
Chaque membre a a name Attributs et attributs de valeur :
member = Color.red print(member.name) # red print(member.value) # 1
prend en charge le parcours itératif des membres dans l'ordre défini. S'il y a des membres avec des valeurs en double, seul le premier membre en double est obtenu :
for color in Color: print(color)L'attribut spécial
est un dictionnaire ordonné mappant les noms aux membres, qui peuvent également être parcourus : __members__
for color in Color.__members__.items(): print(color) # ('red', <Color.red: 1>)
Comparaison d'énumération
Les membres d'une énumération peuvent être comparé pour l'identité via ou pour l'équivalence via is
: ==
Color.red is Color.red Color.red is not Color.blue Color.blue == Color.red Color.blue != Color.redLes membres d'une énumération ne peuvent pas être comparés pour la taille :
Color.red < Color.blue # TypeError: unorderable types: Color() < Color()
Énumération étendue IntEnum
IntEnum est une extension d'Enum Différents types d'énumérations entières peuvent également être comparés entre eux :from enum import IntEnum class Shape(IntEnum): circle = 1 square = 2 class Request(IntEnum): post = 1 get = 2 print(Shape.circle == 1) # True print(Shape.circle < 3) # True print(Shape.circle == Request.post) # True print(Shape.circle >= Request.post) # True
RésuméLa fonction du module enum est très claire et son utilisation est simple. Sa méthode d'implémentation mérite également d'être apprise. Si vous en avez l'occasion, vous pouvez jeter un œil à son code source.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!