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()