1. Herencia
La herencia permite crear una clase nueva basada en otra. La clase hija hereda atributos y métodos de la clase padre.
class Persona:
def __init__(self, nombre):
self.nombre = nombre
def saludar(self):
return f"Hola, soy {self.nombre}"
class Alumno(Persona):
pass
a = Alumno("Ana")
print(a.saludar())
La clase Alumno hereda el método saludar() sin necesidad de reescribirlo.
2. Añadir o extender funcionalidad
La clase hija puede añadir nuevos atributos o métodos.
class Alumno(Persona):
def __init__(self, nombre, curso):
super().__init__(nombre) # Llama al constructor de Persona
self.curso = curso
3. Sobrescritura de métodos (override)
La clase hija puede redefinir un método del padre.
class Profesor(Persona):
def saludar(self):
return f"Buenos días, soy el profesor {self.nombre}"
Polimorfismo
El polimorfismo permite que diferentes clases respondan de forma distinta al mismo método.
Ejemplo clásico:
class Persona:
def rol(self):
return "Soy una persona"
class Alumno(Persona):
def rol(self):
return "Soy un alumno"
class Profesor(Persona):
def rol(self):
return "Soy un profesor"
def presentar(obj):
print(obj.rol())
presentar(Alumno())
presentar(Profesor())
Cada objeto ejecuta su propia versión del método rol().
Polimorfismo con colecciones
personas = [Alumno(), Profesor(), Persona()]
for p in personas:
print(p.rol())
Cada objeto se comporta según su clase.
ACTIVIDAD PRÁCTICA: “Sistema de gestión del centro educativo”
Objetivo: que tus alumnos entiendan herencia, sobrescritura y polimorfismo en un caso real de FP.
Enunciado
Crea un sistema con estas clases:
Clase base: Persona
nombre
edad
método
descripcion()→ devuelve"Soy una persona llamada X"
Clase hija: Alumno
curso
sobrescribe
descripcion()→"Soy el alumno X del curso Y"
Clase hija: Profesor
asignatura
sobrescribe
descripcion()→"Soy el profesor X de la asignatura Y"
Clase hija: Administrador
departamento
sobrescribe
descripcion()→"Soy el administrador X del departamento Y"
Después:
Crea una lista con objetos de los tres tipos.
Recorre la lista y muestra la descripción de cada uno (polimorfismo).
Añade un método común
saludar()en Persona y comprueba que todos lo heredan.
Solución propuesta
class Persona:
def __init__(self, nombre, edad):
self.nombre = nombre
self.edad = edad
def descripcion(self):
return f"Soy una persona llamada {self.nombre}"
def saludar(self):
return f"Hola, soy {self.nombre}"
class Alumno(Persona):
def __init__(self, nombre, edad, curso):
super().__init__(nombre, edad)
self.curso = curso
def descripcion(self):
return f"Soy el alumno {self.nombre} del curso {self.curso}"
class Profesor(Persona):
def __init__(self, nombre, edad, asignatura):
super().__init__(nombre, edad)
self.asignatura = asignatura
def descripcion(self):
return f"Soy el profesor {self.nombre} de {self.asignatura}"
class Administrador(Persona):
def __init__(self, nombre, edad, departamento):
super().__init__(nombre, edad)
self.departamento = departamento
def descripcion(self):
return f"Soy el administrador {self.nombre} del departamento {self.departamento}"
# Crear objetos
p1 = Alumno("Ana", 17, "1º DAM")
p2 = Profesor("Luis", 40, "Programación")
p3 = Administrador("Marta", 35, "Secretaría")
personas = [p1, p2, p3]
# Polimorfismo
for p in personas:
print(p.descripcion())
print(p.saludar())
print()
Ejemplo de salida
Soy el alumno Ana del curso 1º DAM
Hola, soy Ana
Soy el profesor Luis de Programación
Hola, soy Luis
Soy el administrador Marta del departamento Secretaría
Hola, soy Marta