Maison  >  Article  >  développement back-end  >  Comment implémenter l'énumération en Python

Comment implémenter l'énumération en Python

WBOY
WBOYavant
2023-05-11 16:28:141185parcourir

Utilisez des classes ordinaires pour implémenter directement les énumérations

En Python, les énumérations sont les mêmes que les variables de classe que nous définissons dans les objets. Chaque variable de classe est un élément d'énumération. La façon d'accéder aux éléments d'énumération est la suivante : classe Ajoutez la variable de classe. au nom, comme ceci :

class color():
    YELLOW  = 1
    RED     = 2
    GREEN   = 3
    PINK    = 4
 
# 访问枚举项
print(color.YELLOW) # 1

Bien que cela puisse résoudre le problème, ce n'est pas rigoureux et pas très sûr. Par exemple :

1. Dans la classe d'énumération, il ne devrait pas y avoir d'énumérations avec la même clé. (variable de classe)

2. La valeur de l'élément d'énumération ne peut pas être modifiée directement en dehors de la classe

class color():
    YELLOW  = 1
    YELLOW  = 3   # 注意这里又将YELLOW赋值为3,会覆盖前面的1
    RED     = 2
    GREEN   = 3
    PINK    = 4
 
# 访问枚举项
print(color.YELLOW) # 3
 
# 但是可以在外部修改定义的枚举项的值,这是不应该发生的
color.YELLOW = 99
print(color.YELLOW) # 99

Solution : utilisez le module enum

Le module enum est un module intégré au système et peut être importé directement en utilisant import, mais lors de l'importation, il n'est pas recommandé d'utiliser import enum pour importer toutes les données dans le module enum. Généralement, les éléments les plus couramment utilisés sont Enum, IntEnum et uniques dans le module enum

# 导入枚举类
from enum import Enum
 
# 继承枚举类
class color(Enum):
    YELLOW  = 1
    BEOWN   = 1 
    # 注意BROWN的值和YELLOW的值相同,这是允许的,此时的BROWN相当于YELLOW的别名
    RED     = 2
    GREEN   = 3
    PINK    = 4
 
class color2(Enum):
    YELLOW  = 1
    RED     = 2
    GREEN   = 3
    PINK    = 4

Utilisation. votre propre classe d'énumération définie :

print(color.YELLOW) # color.YELLOW
print(type(color.YELLOW)) # <enum &#39;color&#39;>
 
print(color.YELLOW.value)  # 1
print(type(color.YELLOW.value)) # <class &#39;int&#39;>
 
print(color.YELLOW == 1)    # False
print(color.YELLOW.value == 1)  # True
print(color.YELLOW == color.YELLOW)  # True
print(color.YELLOW == color2.YELLOW)  # False
print(color.YELLOW is color2.YELLOW)  # False
print(color.YELLOW is color.YELLOW)  # True
 
print(color(1))         # color.YELLOW
print(type(color(1)))   # <enum &#39;color&#39;>
  注意事项如下:

1. Les classes d'énumération ne peuvent pas être utilisées pour instancier des objets

2 Pour accéder à un élément de la classe d'énumération, utilisez simplement le nom de la classe pour y accéder directement ainsi que l'élément auquel accéder, comme la couleur. .JAUNE

3. Classe d'énumération La clé = valeur définie à l'intérieur ne peut pas être modifiée en dehors de la classe, ce qui signifie que l'approche suivante est erronée

color.YELLOW = 2  # Wrong, can&#39;t reassign member

4. Les éléments d'énumération peuvent être utilisés à des fins de comparaison, en utilisant ==, ou is 

. 5. Après avoir importé Enum, la clé et la valeur dans une classe d'énumération, la clé ne peut pas être la même, la valeur peut être la même, mais les clés avec la même valeur seront utilisées comme alias

6. La classe d'énumération ne peut être constituée que de nombres entiers, alors vous pouvez importer IntEnum puis hériter d'IntEnum. Notez qu'à ce stade, si la valeur est un nombre de chaîne, aucune erreur ne sera signalée :

from enum import IntEnum

Si les clés de l'énumération. la classe ne peut pas être la même, alors lors de l'importation d'Enum. En même temps, des fonctions uniques doivent être importées

from enum import Enum, unique

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer