Clases abstractas en Python con ABC y @abstractmethod
Clase 13 de 17 • Curso de Python Orientado a Objetos
Contenido del curso
- 8

Composición en Python: crear relaciones entre objetos sin herencia
05:24 - 9

Separación de código Python en módulos con imports
07:58 - 10

Manejo de excepciones con try, except y raise en Python
08:58 - 11

Sistema de préstamos con identificación de usuarios en Python
08:45 quiz de Implementar Protocolos con Métodos Especiales
- 12

Búsqueda de libros y ejecución de préstamos en Python
08:57 - 13

Clases abstractas en Python con ABC y @abstractmethod
04:32 - 14

Decoradores property en Python para atributos con validación
06:22 - 15

Decoradores @staticmethod y @classmethod en Python
07:18 - 16

Serialización de objetos Python a JSON para persistencia de datos
07:47 quiz de Relaciones entre Clases y Polimorfismo
Aprende a crear clases abstractas en Python con el módulo ABC para imponer contratos claros entre clases. Con el decorador @abstractmethod, podrás exigir la sobrescritura de métodos en cada subclase, detectar errores en tiempo de ejecución y reforzar la herencia con interfaces consistentes.
¿Qué es una clase abstracta en Python con ABC?
Una clase abstracta es un contrato: define qué debe hacer una clase, no cómo hacerlo. Piensa en planos arquitectónicos que aseguran puertas y ventanas en cada edificio. Con ABC, las subclases deben implementar los métodos marcados como abstractos. A diferencia de Protocol, aquí sí hay validación en ejecución de que el método fue implementado.
¿Cómo definir UsuarioBase con @abstractmethod?
from abc import ABC, abstractmethod
class UsuarioBase(ABC):
@abstractmethod
def solicitar_libro(self):
pass
- Define el contrato base que todas las subclases deben respetar.
- Usa el decorador @abstractmethod para marcar métodos obligatorios.
- Emplea
passpara dejar el método sin implementación.
¿Cómo heredar e implementar en una subclase?
class Usuario(UsuarioBase):
def solicitar_libro(self):
# Lógica concreta de la subclase.
...
- Hereda de UsuarioBase para reutilizar el contrato.
- Implementa el método requerido para poder instanciar la clase.
¿Qué valida Python en tiempo de ejecución?
- Si falta un método abstracto en la subclase, al instanciar se lanza TypeError.
- La verificación ocurre al ejecutar, por ejemplo:
python main.py. - El decorador @abstractmethod es la clave de esta verificación.
¿Cómo detectar y corregir errores al faltar un método?
Al ejecutar la aplicación con python main.py, todo funciona si las subclases implementan los métodos abstractos. Si agregas uno nuevo en la clase base, la siguiente ejecución fallará con TypeError hasta que lo implementes.
Agregar un nuevo método abstracto en la base:
from abc import ABC, abstractmethod
class UsuarioBase(ABC):
@abstractmethod
def solicitar_libro(self):
pass
@abstractmethod
def metodo_de_prueba(self):
pass
- Se declara
metodo_de_pruebacomo obligatorio. - Cualquier subclase debe implementarlo antes de poder instanciarse.
Implementarlo en la subclase para resolver el error:
class Usuario(UsuarioBase):
def solicitar_libro(self):
...
def metodo_de_prueba(self):
return "Método de prueba para saber cómo funciona ABC"
- Tras implementar, la aplicación vuelve a ejecutarse con normalidad.
- El mensaje de retorno confirma el flujo correcto.
Checklist rápido.
- Ejecuta: python main.py y verifica que todo corre.
- Agrega @abstractmethod en la base y vuelve a ejecutar.
- Observa el TypeError que impide instanciar la subclase.
- Implementa el método faltante y prueba de nuevo.
¿Dónde conviene usar ABC y qué reto practicar?
Las clases abstractas con ABC crean contratos sólidos y aseguran interfaces consistentes entre subclases. Son especialmente útiles en frameworks y bibliotecas donde necesitas que todas las implementaciones cumplan el mismo conjunto de métodos.
Reto práctico.
- Crea una clase abstracta para el libro: LibroBase que herede de ABC.
- Declara con @abstractmethod todos los métodos que usan tus subclases de libro.
- Ejecuta y verifica que las subclases implementen todo lo requerido.
- Comparte tu solución en los comentarios.