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 la semaine, le mois, le statut, etc. Il n'y a pas de type d'énumération spécial dans les types natifs de Python (types intégrés), mais nous pouvons l'implémenter via de nombreuses méthodes, telles que des dictionnaires, des classes, etc. :
WEEKDAY = { 'MON': 1, 'TUS': 2, 'WEN': 3, 'THU': 4, 'FRI': 5 } class Color: RED = 0 GREEN = 1 BLUE = 2
Les deux méthodes ci-dessus peuvent être considérées comme Dans l'implémentation de types d'énumération simples, il n'y a aucun problème si ces variables d'énumération ne sont utilisées que dans la portée locale, mais le problème est qu'elles sont toutes mutables, ce qui signifie qu'elles peuvent être modifiées à d'autres endroits et affecter l'implémentation. use:
WEEKDAY['MON'] = WEEKDAY['FRI'] print(WEEKDAY) {'FRI': 5, 'TUS': 2, 'MON': 5, 'WEN': 3, 'THU': 4} 通过类定义的枚举甚至可以实例化,变得不伦不类: c = Color() print(c.RED) Color.RED = 2 print(c.RED) 0 2
Bien sûr, vous pouvez également utiliser des types immuables (immuables), tels que des tuples, mais cela perd l'intention originale du type énumération et dégrade l'étiquette en une variable dénuée de sens :
COLOR = ('R', 'G', 'B') print(COLOR[0], COLOR[1], COLOR[2]) R G B
Afin de fournir une meilleure solution, Python a ajouté la bibliothèque standard enum dans la version 3.4 via PEP 435. Les versions antérieures à 3.4 peuvent également télécharger des bibliothèques compatibles et prises en charge via pip install enum. enum fournit trois outils : Enum/IntEnum/unique, et leur utilisation est très simple. Vous pouvez définir des types d'énumération en héritant d'Enum/IntEnum et limite les membres de l'énumération à (ou peut être converti en) des types entiers. être utilisé comme Le décorateur restreint la valeur du membre de l'énumération à ne pas être répétable :
from enum import Enum, IntEnum, unique try: @unique class WEEKDAY(Enum): MON = 1 TUS = 2 WEN = 3 THU = 4 FRI = 1 except ValueError as e: print(e) duplicate values found in : FRI -> MON try: class Color(IntEnum): RED = 0 GREEN = 1 BLUE = 'b' except ValueError as e: print(e) invalid literal for int() with base 10: 'b'
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!