Les énumérations en Python

Les énumérations en Python

Cet article explique les énumérations en Python.

YouTube Video

Les énumérations en Python

Le module enum de Python est une classe spéciale pour définir des constantes, améliorer la lisibilité et éviter les erreurs de code.

Qu'est-ce qu'un Enum ?

Enum (abréviation de énumération) est une classe utilisée pour définir un ensemble de constantes nommées. Il est généralement utilisé pour regrouper des constantes liées. Par exemple, il convient pour représenter des couleurs, des jours de la semaine ou des directions.

Pourquoi utiliser Enum ?

Il y a plusieurs raisons d'utiliser Enum.

  • Amélioration de la lisibilité : Utiliser des constantes nommées rend le code plus intuitif.
  • Prévention des erreurs : Cela évite les modifications ou l'utilisation incorrecte des valeurs constantes.
  • Regroupement : Cela organise les constantes liées en une seule classe, représentant des données structurées.

Utilisation de base de Enum

Pour utiliser enum, importez le module enum et définissez une classe. Cette classe doit hériter de Enum et définir les valeurs que vous voulez traiter comme des constantes.

Exemple basique de Enum

 1from enum import Enum
 2
 3class Color(Enum):
 4    RED = 1
 5    GREEN = 2
 6    BLUE = 3
 7
 8# Usage of Enum
 9print(Color.RED)        # Color.RED
10print(Color.RED.name)   # RED
11print(Color.RED.value)  # 1

Dans cet exemple, nous définissons une classe Enum appelée Color avec trois valeurs. Chaque nom est accessible via l'attribut name, et sa valeur associée est accessible via l'attribut value.

Comparer des Enums

Les membres d'un Enum peuvent être comparés soit par leur nom, soit par leur valeur. Vous pouvez utiliser l'opérateur is ou l'opérateur == pour vérifier l'identité et l'égalité.

Exemple de comparaison

 1from enum import Enum
 2
 3class Direction(Enum):
 4    NORTH = 1
 5    SOUTH = 2
 6    EAST = 3
 7    WEST = 4
 8
 9# Equality comparison
10print(Direction.NORTH == Direction.SOUTH)  # False
11print(Direction.NORTH == Direction.NORTH)  # True
12
13# Identity comparison using is
14print(Direction.NORTH is Direction.SOUTH)  # False
15print(Direction.NORTH is Direction.NORTH)  # True

Ici, des comparaisons d'Enum utilisant == et is sont démontrées. L'Enum est conçu pour comparer correctement les objets ayant les mêmes noms et valeurs.

Attribution automatique de valeurs avec auto()

Si vous souhaitez attribuer automatiquement des valeurs aux membres d'Enum, vous pouvez utiliser enum.auto(). auto() permet à Python d'attribuer automatiquement des valeurs, supprimant ainsi le besoin de spécifications manuelles par les développeurs.

Exemple de auto()

 1from enum import Enum, auto
 2
 3class Animal(Enum):
 4    DOG = auto()
 5    CAT = auto()
 6    MOUSE = auto()
 7
 8# Check the values of Enum
 9print(Animal.DOG.value)    # 1
10print(Animal.CAT.value)    # 2
11print(Animal.MOUSE.value)  # 3

Dans cet exemple, l'utilisation de auto() supprime la nécessité de spécifier explicitement les valeurs, rendant le code plus concis.

Attribution de plusieurs valeurs aux membres d'Enum

Les membres d'Enum peuvent également contenir plusieurs valeurs, telles que des tuples. Cela permet à chaque membre de contenir des informations supplémentaires connexes.

Exemple utilisant des tuples

 1from enum import Enum
 2
 3class Status(Enum):
 4    ACTIVE = (1, 'Active user')
 5    INACTIVE = (2, 'Inactive user')
 6    SUSPENDED = (3, 'Suspended user')
 7
 8# Accessing Enum members
 9print(Status.ACTIVE.name)    # ACTIVE
10print(Status.ACTIVE.value)   # (1, 'Active user')
11print(Status.ACTIVE.value[1])  # Active user

Dans cet exemple, les membres de la classe Status ont chacun deux valeurs, représentant l'état et la description. Cela est utile lorsque vous souhaitez associer plusieurs informations à un membre d'Enum.

Utilisation d'Enum comme drapeaux

Le module enum de Python inclut une classe Flag qui peut être utilisée comme des drapeaux binaires. L'utilisation de Flag permet de gérer plusieurs états en combinaison.

Exemple de Flag

 1from enum import Flag, auto
 2
 3class Permission(Flag):
 4    READ = auto()
 5    WRITE = auto()
 6    EXECUTE = auto()
 7
 8# Combining flags
 9permission = Permission.READ | Permission.WRITE
10print(permission)                 # Permission.READ|WRITE
11print(Permission.EXECUTE in permission)  # False

Dans cet exemple, des opérations au niveau des bits sont utilisées pour combiner plusieurs permissions. L'utilisation de Flag permet de gérer plusieurs états de manière succincte.

Points à garder à l'esprit lors de l'utilisation d'Enum

Immutabilité d'Enum

Les membres d'Enum sont immuables. Une fois définis, leurs noms ou valeurs ne peuvent pas être modifiés. C'est une caractéristique importante pour maintenir la cohérence en tant que constantes.

1from enum import Enum
2
3class Days(Enum):
4    MONDAY = 1
5    TUESDAY = 2
6
7# Example of immutability
8# Days.MONDAY = 3  # AttributeError: Cannot reassign members.

Interdiction des membres dupliqués

Les membres de Enum doivent avoir des noms et des valeurs uniques. Même lorsque les valeurs en double sont autorisées, Python privilégie automatiquement le premier membre.

Résumé

Le module enum de Python est un outil très utile pour regrouper des ensembles de constantes, améliorer la lisibilité et maintenir la cohérence du code. Une variété d'utilisations est possible, allant de l'utilisation de base à l'attribution automatique de valeurs avec auto(), ainsi qu'à l'utilisation comme drapeaux binaires.

Comprendre et maîtriser correctement enum peut améliorer la qualité du code et aider à prévenir les erreurs.

Vous pouvez suivre l'article ci-dessus avec Visual Studio Code sur notre chaîne YouTube. Veuillez également consulter la chaîne YouTube.

YouTube Video