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

WBOY
Libérer: 2023-05-11 16:28:14
avant
1212 Les gens l'ont consulté

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
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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;>
  注意事项如下:
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!