Comparaison des énumérations

Parce que les membres de l'énumération ne sont pas ordonnés, ils ne prennent en charge que la comparaison par identité et égalité. Jetons un coup d'œil à l'utilisation de == et est :

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
from enum import Enum
class User(Enum):
    Twowater = 98
    Liangdianshui = 30
    Tom = 12
Twowater = User.Twowater
Liangdianshui = User.Liangdianshui
print(Twowater == Liangdianshui, Twowater == User.Twowater)
print(Twowater is Liangdianshui, Twowater is User.Twowater)
try:
    print('\n'.join('  ' + s.name for s in sorted(User)))
except TypeError as err:
    print(' Error : {}'.format(err))

Le résultat de sortie :

False True
False True
 Error : '<' not supported between instances of 'User' and 'User'

Vous pouvez consulter le résultat de sortie final et signaler une exception, car les opérateurs de comparaison supérieur à et inférieur à génèrent des exceptions TypeError. Autrement dit, l’énumération de la classe Enum ne prend pas en charge la comparaison de l’opérateur de taille.

Alors, les classes de dénombrement peuvent-elles être utilisées pour comparer les tailles ?

Bien sûr, c'est possible. L'utilisation de la classe IntEnum pour l'énumération prend en charge la fonction de comparaison.

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
import enum
class User(enum.IntEnum):
    Twowater = 98
    Liangdianshui = 30
    Tom = 12
try:
    print('\n'.join(s.name for s in sorted(User)))
except TypeError as err:
    print(' Error : {}'.format(err))

Regardez les résultats de sortie :

Tom
Liangdianshui
Twowater

Vous pouvez voir dans les résultats de sortie que les membres de la classe d'énumération sont triés en fonction de la taille de leur valeur. En d’autres termes, des comparaisons de tailles peuvent être effectuées.

Formation continue
  • Recommandations de cours
  • Téléchargement du didacticiel