La herencia es uno de los pilares fundamentales de la Programación Orientada a Objetos (POO). Permite que una clase (llamada subclase o clase derivada) herede atributos y métodos de otra clase (llamada superclase o clase base). Esto facilita la reutilización del código y la creación de estructuras jerárquicas.
Conceptos Clave
- Superclase (Clase Base): La clase de la cual se heredan atributos y métodos.
- Subclase (Clase Derivada): La clase que hereda atributos y métodos de la superclase.
- Herencia Simple: Una subclase hereda de una única superclase.
- Herencia Múltiple: Una subclase hereda de más de una superclase (Python soporta herencia múltiple).
Ejemplo Básico de Herencia
Vamos a crear una superclase Animal y una subclase Perro que hereda de Animal.
# Definición de la superclase
class Animal:
def __init__(self, nombre):
self.nombre = nombre
def hacer_sonido(self):
return "Sonido de animal"
# Definición de la subclase
class Perro(Animal):
def hacer_sonido(self):
return "Guau"
# Crear una instancia de Perro
mi_perro = Perro("Firulais")
print(mi_perro.nombre) # Salida: Firulais
print(mi_perro.hacer_sonido()) # Salida: GuauExplicación del Código
-
Superclase
Animal:- Tiene un método
__init__que inicializa el atributonombre. - Tiene un método
hacer_sonidoque devuelve "Sonido de animal".
- Tiene un método
-
Subclase
Perro:- Hereda de
Animal(indicado porclass Perro(Animal)). - Sobrescribe el método
hacer_sonidopara devolver "Guau".
- Hereda de
-
Instancia
mi_perro:- Se crea una instancia de
Perrollamadami_perro. mi_perrotiene acceso al atributonombrey al método sobrescritohacer_sonido.
- Se crea una instancia de
Herencia Múltiple
Python permite que una clase herede de múltiples superclases. Esto se hace listando las superclases entre paréntesis separados por comas.
class Mamifero:
def __init__(self, nombre):
self.nombre = nombre
def amamantar(self):
return "Amamantando"
class Volador:
def volar(self):
return "Volando"
class Murcielago(Mamifero, Volador):
pass
# Crear una instancia de Murcielago
mi_murcielago = Murcielago("Bruce")
print(mi_murcielago.nombre) # Salida: Bruce
print(mi_murcielago.amamantar()) # Salida: Amamantando
print(mi_murcielago.volar()) # Salida: VolandoExplicación del Código
-
Superclases
MamiferoyVolador:Mamiferotiene un métodoamamantar.Voladortiene un métodovolar.
-
Subclase
Murcielago:- Hereda de
MamiferoyVolador. - No necesita definir nuevos métodos, ya que hereda
amamantaryvolar.
- Hereda de
-
Instancia
mi_murcielago:- Se crea una instancia de
Murcielagollamadami_murcielago. mi_murcielagotiene acceso a los métodosamamantaryvolar.
- Se crea una instancia de
Ejercicio Práctico
Ejercicio 1
Crea una superclase Vehiculo con los atributos marca y modelo, y un método arrancar. Luego, crea una subclase Coche que herede de Vehiculo y añada un atributo puertas. Sobrescribe el método arrancar para que incluya la información del número de puertas.
Solución
class Vehiculo:
def __init__(self, marca, modelo):
self.marca = marca
self.modelo = modelo
def arrancar(self):
return f"El {self.marca} {self.modelo} está arrancando"
class Coche(Vehiculo):
def __init__(self, marca, modelo, puertas):
super().__init__(marca, modelo)
self.puertas = puertas
def arrancar(self):
return f"El {self.marca} {self.modelo} con {self.puertas} puertas está arrancando"
# Crear una instancia de Coche
mi_coche = Coche("Toyota", "Corolla", 4)
print(mi_coche.arrancar()) # Salida: El Toyota Corolla con 4 puertas está arrancandoEjercicio 2
Crea una superclase Persona con los atributos nombre y edad, y un método presentarse. Luego, crea una subclase Estudiante que herede de Persona y añada un atributo carrera. Sobrescribe el método presentarse para que incluya la información de la carrera.
Solución
class Persona:
def __init__(self, nombre, edad):
self.nombre = nombre
self.edad = edad
def presentarse(self):
return f"Hola, soy {self.nombre} y tengo {self.edad} años"
class Estudiante(Persona):
def __init__(self, nombre, edad, carrera):
super().__init__(nombre, edad)
self.carrera = carrera
def presentarse(self):
return f"Hola, soy {self.nombre}, tengo {self.edad} años y estudio {self.carrera}"
# Crear una instancia de Estudiante
mi_estudiante = Estudiante("Ana", 21, "Ingeniería Informática")
print(mi_estudiante.presentarse()) # Salida: Hola, soy Ana, tengo 21 años y estudio Ingeniería InformáticaResumen
En esta lección, hemos aprendido sobre la herencia en Python, incluyendo:
- La definición de superclases y subclases.
- Cómo sobrescribir métodos en subclases.
- La herencia múltiple y su implementación en Python.
La herencia es una herramienta poderosa que permite la reutilización del código y la creación de jerarquías de clases, facilitando el diseño y mantenimiento de aplicaciones complejas. En la próxima lección, exploraremos el polimorfismo y cómo se puede utilizar para escribir código más flexible y reutilizable.
Curso de Programación en Python
Módulo 1: Introducción a Python
- Introducción a Python
- Configuración del Entorno de Desarrollo
- Sintaxis de Python y Tipos de Datos Básicos
- Variables y Constantes
- Entrada y Salida Básica
Módulo 2: Estructuras de Control
- Sentencias Condicionales
- Bucles: for y while
- Herramientas de Control de Flujo
- Comprensiones de Listas
Módulo 3: Funciones y Módulos
- Definición de Funciones
- Argumentos de Función
- Funciones Lambda
- Módulos y Paquetes
- Visión General de la Biblioteca Estándar
Módulo 4: Estructuras de Datos
Módulo 5: Programación Orientada a Objetos
Módulo 6: Manejo de Archivos
- Lectura y Escritura de Archivos
- Trabajo con Archivos CSV
- Manejo de Datos JSON
- Operaciones de Archivos y Directorios
Módulo 7: Manejo de Errores y Excepciones
- Introducción a las Excepciones
- Manejo de Excepciones
- Lanzamiento de Excepciones
- Excepciones Personalizadas
Módulo 8: Temas Avanzados
- Decoradores
- Generadores
- Administradores de Contexto
- Concurrencia: Hilos y Procesos
- Asyncio para Programación Asíncrona
Módulo 9: Pruebas y Depuración
- Introducción a las Pruebas
- Pruebas Unitarias con unittest
- Desarrollo Guiado por Pruebas
- Técnicas de Depuración
- Uso de pdb para Depuración
Módulo 10: Desarrollo Web con Python
- Introducción al Desarrollo Web
- Fundamentos del Framework Flask
- Construcción de APIs REST con Flask
- Introducción a Django
- Construcción de Aplicaciones Web con Django
Módulo 11: Ciencia de Datos con Python
- Introducción a la Ciencia de Datos
- NumPy para Computación Numérica
- Pandas para Manipulación de Datos
- Matplotlib para Visualización de Datos
- Introducción al Aprendizaje Automático con scikit-learn
