Resumen

La herencia en Python es clave para escribir código limpio y evitar duplicación en proyectos reales como un sistema de biblioteca. Con una estructura similar a un árbol genealógico, permite que clases hijas reutilicen atributos y métodos de una clase padre, manteniendo la lógica central en un solo lugar y habilitando comportamientos específicos donde haga falta.

¿Qué es la herencia en Python y por qué evita duplicación?

La herencia establece relaciones de “es un tipo de”: un Estudiante es un tipo de Usuario, igual que un Profesor. Así, las clases hijas heredan atributos y métodos del padre, y los cambios en la clase base se propagan automáticamente. Además, el override permite redefinir métodos en subclases para comportamientos distintos, habilitando polimorfismo sin romper el diseño. Todo esto promueve reutilización y mantenibilidad del código.

  • Clase padre con atributos y métodos comunes.
  • Clases hijas que heredan y especializan comportamiento.
  • Override para validar reglas específicas.
  • Polimorfismo para responder distinto con la misma interfaz.
  • Herencia múltiple cuando un objeto combina roles.

¿Cómo modelar usuarios con clases que heredan?

Partimos de una clase base Usuario con los datos mínimos: nombre y cédula, y un método común: solicitar_libro. Luego extendemos con Estudiante y Profesor, cada uno con validaciones particulares mediante override del método.

¿Cómo definir la clase base usuario?

Esta clase concentra lo compartido por todos los usuarios del sistema: identidad y la capacidad de solicitar libros.

class Usuario: def __init__(self, nombre, cedula): self.nombre = nombre self.cedula = cedula def solicitar_libro(self, titulo): # Lógica genérica de solicitud para cualquier usuario return f"Solicitud de '{titulo}' registrada para {self.nombre}."

¿Cómo extender con estudiante?

Estudiante hereda de Usuario y agrega atributos propios: libros_prestados, carrera y limite_libros. Con override de solicitar_libro se valida, por ejemplo, que la carrera esté activa y que no se exceda el límite de préstamos.

class Estudiante(Usuario): def __init__(self, nombre, cedula, libros_prestados=0, carrera=None, limite_libros=3): super().__init__(nombre, cedula) self.libros_prestados = libros_prestados self.carrera = carrera self.limite_libros = limite_libros def solicitar_libro(self, titulo): # override: validación extra para estudiantes if not self.carrera: return "No se puede prestar: carrera inactiva o no registrada." if self.libros_prestados >= self.limite_libros: return "No se puede prestar: alcanzó el límite de libros." return super().solicitar_libro(titulo)

¿Cómo especializar con profesor?

Profesor también hereda de Usuario, pero su validación es distinta: interesa el departamento y no la carrera. Se vuelve a crear el método con override para cubrir esa regla.

class Profesor(Usuario): def __init__(self, nombre, cedula, departamento=None): super().__init__(nombre, cedula) self.departamento = departamento def solicitar_libro(self, titulo): # override: validación para profesores if not self.departamento: return "No se puede prestar: departamento no asignado." return super().solicitar_libro(titulo)

¿Cuándo aplicar herencia múltiple y polimorfismo en una biblioteca?

Hay casos en los que un mismo usuario combina roles, por ejemplo, Profesor y Estudiante. La herencia múltiple permite componer ambos comportamientos y, si se requiere, priorizar las funcionalidades del profesor por encima de las del estudiante.

class ProfesorEstudiante(Profesor, Estudiante): pass # Se priorizan comportamientos de Profesor al declarar primero esa clase
  • Relación “es un tipo de” para estructurar jerarquías.
  • Atributos compartidos: nombre, cédula, solicitar_libro.
  • Atributos específicos: libros_prestados, carrera, limite_libros, departamento.
  • Override para validar reglas por rol sin duplicar código.
  • Polimorfismo para responder distinto con la misma interfaz.
  • Herencia múltiple cuando un usuario cumple dos roles y se requiere prioridad.

En la próxima implementación, estos conceptos se aplicarán al sistema de biblioteca. Como reto: identifica posibles jerarquías y cuéntalas en los comentarios.