0Pricing
Python Academy · Lección

IntEnum y Flag

Use enumeraciones de enteros y de flags

IntEnum y Flag es una lección gratuita de Python Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Python Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Python Academy incluye 4 lecciones en total.

Más allá del Enum simple

El módulo enum incluye clases base especializadas. Los miembros de IntEnum se comportan como enteros y los miembros de Flag se pueden combinar con operadores bit a bit. Estas clases cubren casos en los que un Enum simple resulta demasiado restrictivo.

El Enum simple no es un int

Un miembro de Enum simple no se puede intercambiar con su valor entero. Compararlo con un número devuelve False.

from enum import Enum

class Level(Enum):
    LOW = 1
    HIGH = 2

print(Level.LOW == 1)

IntEnum se compara como int

Un miembro de IntEnum es un entero, por lo que se compara como igual a su valor numérico y admite ordenación.

from enum import IntEnum

class Level(IntEnum):
    LOW = 1
    HIGH = 2

print(Level.LOW == 1)
print(Level.LOW < Level.HIGH)

IntEnum en operaciones aritméticas

Como los miembros son enteros reales, puede utilizarlos en operaciones matemáticas y como índices. Utilice esta opción cuando un valor deba interoperar realmente con código numérico.

from enum import IntEnum

class Priority(IntEnum):
    LOW = 1
    MEDIUM = 5
    HIGH = 10

print(Priority.HIGH + 1)
print(Priority.MEDIUM * 2)

Ordenar miembros de IntEnum

Como IntEnum admite ordenación, una lista de miembros se ordena por valor sin necesidad de una función key adicional.

from enum import IntEnum

class Priority(IntEnum):
    LOW = 1
    MEDIUM = 5
    HIGH = 10

for p in sorted([Priority.HIGH, Priority.LOW, Priority.MEDIUM]):
    print(p.name)

Flag para opciones combinables

Un enum Flag está pensado para valores que se combinan. Asigne potencias de dos para que cada miembro ocupe su propio bit.

from enum import Flag, auto

class Permission(Flag):
    READ = auto()
    WRITE = auto()
    EXECUTE = auto()

print(Permission.READ)
print(Permission.READ.value)

Combinar flags con |

Utilice el operador OR bit a bit | para combinar flags en un único valor compuesto.

from enum import Flag, auto

class Permission(Flag):
    READ = auto()
    WRITE = auto()
    EXECUTE = auto()

access = Permission.READ | Permission.WRITE
print(access)

Comprobar la pertenencia con in

Compruebe si un flag está establecido mediante el operador in, que realiza la comprobación bit a bit por usted.

from enum import Flag, auto

class Permission(Flag):
    READ = auto()
    WRITE = auto()
    EXECUTE = auto()

access = Permission.READ | Permission.WRITE
print(Permission.READ in access)
print(Permission.EXECUTE in access)

Intersección y eliminación

Combine flags con & (AND) para encontrar los bits comunes y elimine un flag usando & con el complemento ~.

from enum import Flag, auto

class Permission(Flag):
    READ = auto()
    WRITE = auto()
    EXECUTE = auto()

access = Permission.READ | Permission.WRITE
still = access & ~Permission.WRITE
print(still)

IntFlag para flags enteros

IntFlag combina ambas ideas: flags combinables que también se comportan como enteros simples. Resulta útil al interactuar con API de C o con máscaras de bits almacenadas como números.

from enum import IntFlag, auto

class Mode(IntFlag):
    R = 4
    W = 2
    X = 1

m = Mode.R | Mode.W
print(int(m))

Iterar sobre un Flag combinado

Al recorrer un valor Flag combinado se obtiene cada flag individual que contiene, lo que resulta práctico para enumerar las opciones activas.

from enum import Flag, auto

class Permission(Flag):
    READ = auto()
    WRITE = auto()
    EXECUTE = auto()

access = Permission.READ | Permission.EXECUTE
for p in access:
    print(p.name)

Comprobación rápida

¿Por qué elegiría un enum Flag en lugar de un Enum simple?

Resumen

Ha aprendido a utilizar enums de enteros y de flags.

  • Los miembros de IntEnum se comportan como enteros y admiten ordenación y operaciones aritméticas.
  • Los miembros de Flag se combinan con |, & y ~, y se comprueban con in.
  • IntFlag combina ambos comportamientos.
  • Utilice potencias de dos para los valores de los flags.

Preguntas frecuentes

¿La lección «IntEnum y Flag» es gratis?

Sí — el texto completo de «IntEnum y Flag» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Python Academy, actualiza a CoddyKit PRO. El curso de Python Academy incluye 4 lecciones en total.

¿Qué aprenderé en «IntEnum y Flag»?

Use enumeraciones de enteros y de flags Practicas Python Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Python Academy?

No se requiere experiencia previa. Python Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «IntEnum y Flag»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Python Academy?

Sí. Cada lección de Python Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. La clase Enum
  2. IntEnum y Flag
  3. Conceptos básicos de NamedTuple
  4. typing.NamedTuple
← Volver a Python Academy