Python fournit un type Enum natif dans la version 3.4 et supérieure. Pour les versions antérieures, vous pouvez utiliser des bibliothèques tierces comme enum34 ou aenum.
Utilisation d'enum34 ou stdlib Enum :
from enum import Enum Animal = Enum('Animal', 'ant bee cat dog') Animal.ant # <Animal.ant: 1> Animal['ant'] # <Animal.ant: 1> (string lookup) Animal.ant.name # 'ant' (inverse lookup)
Utilisation d'aenum :
from aenum import Enum Animal = Enum('Animal', 'ant bee cat dog') Animal.ant # same as enum34 Animal['ant'] # same as enum34 Animal.ant.name # same as enum34
Utilisation d'une version antérieure de Python Versions :
Pour les versions antérieures de Python, vous pouvez utiliser une fonction personnalisée comme celle-ci :
def enum(**enums): return type('Enum', (), enums) Numbers = enum(ONE=1, TWO=2, THREE='three') Numbers.ONE # 1 Numbers.TWO # 2 Numbers.THREE # 'three'
Énumération automatique :
Vous peut également utiliser la fonction suivante pour l'énumération automatique :
def enum(*sequential, **named): enums = dict(zip(sequential, range(len(sequential))), **named) return type('Enum', (), enums) Numbers = enum('ZERO', 'ONE', 'TWO') Numbers.ZERO # 0 Numbers.ONE # 1
Inverser Mappage :
Pour prendre en charge la conversion des valeurs d'énumération en noms :
def enum(*sequential, **named): enums = dict(zip(sequential, range(len(sequential))), **named) reverse = dict((value, key) for key, value in enums.iteritems()) enums['reverse_mapping'] = reverse return type('Enum', (), enums) Numbers = enum('ZERO', 'ONE', 'TWO') Numbers.reverse_mapping['1'] # 'ONE'
Typing.Literal (MyPy) :
Dans MyPy , vous pouvez définir des énumérations en utilisant Literal :
from typing import Literal Animal = Literal['ant', 'bee', 'cat', 'dog'] def hello_animal(animal: Animal): print(f"hello {animal}")
Cela empêchera les affectations de valeurs non énumérées.
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!