Los tipos de enumeración se agregaron a la biblioteca estándar de Python en Python 3.4.
Crear enumeración
Python proporciona dos métodos para crear enumeraciones:
- Cree una enumeración basada en la sintaxis de la clase
- Crear enumeración basada en API de funciones
Para crear una enumeración, primero importe la clase Enum
>>> from enum import Enum
Cree una enumeración basada en la sintaxis de la clase
Ejemplo
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
>>> from enum import Enum
>>> class Color(Enum):
... red = 1
... green = 2
... blue = 3
El ejemplo define lo siguiente:
- Define el tipo de color enumerado.
- Los miembros de enumeración del tipo de enumeración Color se definen: Color.red, Color.green y Color.blue.
- Asigne un valor a cada miembro de la enumeración, como el valor de Color.red es 1. Cabe señalar que el valor de un miembro de enumeración se puede especificar como otro tipo, y no existe un requisito obligatorio para ser un tipo integral.
El miembro de enumeración contiene dos atributos: nombre y valor
>>>Color.red.name
red
>>>Color.red.value
1
Definir el valor del tipo de cadena
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
>>> from enum import Enum
>>> class Color(Enum):
... red = 'r'
... green = 'g'
... blue = 'b'
Crear enumeración basada en API de funciones
El ejemplo anterior de creación de enumeración basada en la clase se puede reescribir como
>>>from enum import Enum
>>>Color = Enum('Color','red green blue')
>>>list(Color)
[<Color.red:1>,<Color.green:2>,<Color.blue:3>]
El primer parámetro de la función Enum es el nombre de la enumeración. El segundo parámetro es una lista de miembros enumerados.
Hay tres formas para la lista de miembros de enumeración representada por el segundo parámetro:
- Está representado por una cadena y cada nombre de miembro está separado por un espacio. El valor del miembro se incrementa automáticamente de 1.
- Al usar tuplas, el valor de los miembros se incrementa automáticamente de 1.
- Con un diccionario, el diccionario puede especificar el valor del miembro de enumeración, donde la clave del diccionario es el nombre del miembro de enumeración y el valor es el valor del miembro de enumeración.
Ejemplo de uso de declaración de diccionario
>>>from enum import Enum
>>>Color = Enum('Color',{
'red':1,'green':2,'blue':4})
Miembro de enumeración de acceso
Hay tres formas de acceder a los miembros de la enumeración:
- Utilice un punto (".") Para citar
- Use value para obtener el miembro de enumeración correspondiente al valor
- Usar nombres de miembros de enumeración
Acceso por valor
>>>Color(1)
<Color.red:1>
Acceso por nombre de enumeración
>>>Color['red']
<Color.red:1>
Enum transversal
La enumeración admite atravesar sus miembros
recorrido de lista
>>>list(Color)
[<Color.red:1>,<Color.green:2>,<Color.blue:3>]
para atravesar
>>>for color in Color:
... print(color)
Comparación de tipos enumerados
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
>>> Color.red is Color.red
True
>>> Color.red is Color.blue
False
>>> Color.red is not Color.blue
True
Tenga en cuenta que el miembro de enumeración no es un tipo integral y no se puede realizar una comparación de tamaño, como
>>> Color.red < Color.blue
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unorderable types: Color() < Color()
Solo se puede comparar por la igualdad
>>> Color.blue == Color.red
False
>>> Color.blue != Color.red
True
>>> Color.blue == Color.blue
True
>>> Color.blue == 2
False
Definir el método de enumeración
Dado que el tipo de enumeración también es una clase, también admite métodos de definición para el tipo de enumeración.
Ejemplo:
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
class Mood(Enum):
funky = 1
happy = 3
def describe(self):
# self为枚举成员
return self.name, self.value
def __str__(self):
return 'my custom str! {0}'.format(self.value)
@classmethod
def favorite_mood(cls):
# cls为枚举类型
return cls.happy
utilizar:
>>> Mood.favorite_mood()
<Mood.happy: 3>
>>> Mood.happy.describe()
('happy', 3)
>>> str(Mood.funky)
'my custom str! 1'
Definir subclases de enum
La definición de subclases de enumeración debe cumplir: la enumeración principal no define ningún miembro de enumeración, y luego se permiten las subclases.
>>> class MoreColor(Color):
... pink = 17
...
TypeError: Cannot extend enumerations
Esto se debe a que Mood ha definido miembros de enumeración y no permite la expansión.