Uso de tipos enumerados de Python

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.

Supongo que te gusta

Origin blog.csdn.net/qdPython/article/details/112844409
Recomendado
Clasificación