Siguiendo con programación orientada a objetos en Python (OOP) vamos a ver Herencia simple y herencia múltiple y trataremos de aprender su aplicación y beneficios.
📓 Abre tu cuaderno de Jupyter Notebook que creaste en la lección anterior (12-Clases en Python) y vamos a crear un nuevo cuaderno para esta lección. Llámalo 13-Herencia múltiple en Python.

Cuando hablamos de clases hay una ventaja muy destacable que es la posibilidad de que un objeto perteneciente a una clase sea capaz de heredar los atributos y métodos de otra. El concepto de herencia múltiple nos obliga a pensar en jerarquía de clases y aplicar estos conceptos a la hora de programar. La herencia múltiple permitirá crear objetos con atributos y métodos base.
📚 Recursos externos para profundizar: Consulta la documentación oficial de Python sobre herencia y la guía de herencia múltiple en Python.
Si lo pensamos como si se tratara de animales, sabemos por ejemplo que todas las aves tienen atributos en común: las alas, por ejemplo. Más allá de que puedan o no volar, es un atributo en común que podríamos incluir en una clase «base» para no tener que incluirlo cada vez en cada clase creada para distintos objetos.
Por ejemplo, tanto Ganso, como Pato, como Gallina serán aves, y también serán clases particulares que heredan de ave, por lo tanto tendrán esos atributos y métodos de las aves incluidos, más aquellos atributos y métodos que las hacen únicas. Veamos el siguiente código para explicar herencia con código Python:
# Clase padre
class Aves:
def __init__(self, nombre):
self.nombre = nombre
self.tiene_pico = True
self.tiene_alas = True
def describir(self):
print(f"{self.nombre} tiene pico: {self.tiene_pico}, tiene alas: {self.tiene_alas}")
# Clase hija: Ganso
class Ganso(Aves):
def __init__(self, nombre, puede_volar, largo_ala_cm):
super().__init__(nombre)
self.puede_volar = puede_volar
self.largo_ala_cm = largo_ala_cm
def detalles(self):
self.describir()
print(f"Puede volar: {self.puede_volar}, Largo de alas: {self.largo_ala_cm} cm")
# Clase hija: Pato
class Pato(Aves):
def __init__(self, nombre, puede_volar, largo_ala_cm):
super().__init__(nombre)
self.puede_volar = puede_volar
self.largo_ala_cm = largo_ala_cm
def detalles(self):
self.describir()
print(f"Puede volar: {self.puede_volar}, Largo de alas: {self.largo_ala_cm} cm")
# Clase hija: Gallina
class Gallina(Aves):
def __init__(self, nombre, puede_volar, largo_ala_cm):
super().__init__(nombre)
self.puede_volar = puede_volar
self.largo_ala_cm = largo_ala_cm
def detalles(self):
self.describir()
print(f"Puede volar: {self.puede_volar}, Largo de alas: {self.largo_ala_cm} cm")
# Instancias
ganso = Ganso("Ganso de Canadá", True, 170)
pato = Pato("Pato criollo", True, 100)
gallina = Gallina("Gallina de corral", False, 40)
# Mostrar detalles
print("=== GANSO ===")
ganso.detalles()
print("\n=== PATO ===")
pato.detalles()
print("\n=== GALLINA ===")
gallina.detalles()
=== GANSO === Ganso de Canadá tiene pico: True, tiene alas: True Puede volar: True, Largo de alas: 170 cm === PATO === Pato criollo tiene pico: True, tiene alas: True Puede volar: True, Largo de alas: 100 cm === GALLINA === Gallina de corral tiene pico: True, tiene alas: True Puede volar: False, Largo de alas: 40 cm
- Todas las clases hijas (
Ganso,Pato,Gallina) heredan los atributos comunes (tiene_pico,tiene_alas) desde la claseAves. - Cada clase hija define si puede volar o no y el largo de sus alas.
- Las instancias al final demuestran que heredan de
Avespero también tienen sus atributos propios.
🆚 Herencia simple vs Herencia Múltiple en Python
| Característica | Herencia Simple | Herencia Múltiple |
|---|---|---|
| Definición | Una clase hija hereda de una única clase padre. | Una clase hija hereda de dos o más clases padres. |
| Sintaxis | class Hija(Padre): |
class Hija(Padre1, Padre2): |
| Complejidad | Baja (fácil de entender y depurar). | Media/Alta (puede generar conflictos de nombres). |
Uso de super() |
Llama al constructor de la única clase padre. | Llama a los constructores en orden (MRO). |
| Ejemplo típico | `Estudiante` → `Derecho` | `Estudiante` + `Instituto` → `Derecho` |
Herencia simple
La herencia simple tiene lugar cuando una clase hija hereda los atributos y métodos de una única clase padre. Vamos a proceder a crear dos clases, una principal y una secundaria, en esta última vamos a agregar la función de presentarse accediendo a los atributos de la clase padre.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Creamos la clase padre
class Estudiante(object):
def __init__(self, edad, nombre):
# Definimos los parámetros edad y nombre
self.edad = edad # Declaramos que el atributo edad es igual al argumento edad
self.nombre = nombre # Declaramos que el atributo nombre es igual al argumento nombre
# Creamos la clase hija
class Derecho(Estudiante): # Entre paréntesis indicamos la clase padre (Estudiante)
def presentarse(self):
# Creamos el método presentarse
print(f"Soy {self.nombre}, tengo {self.edad} años y estudio Derecho") # Se presenta llamando los atributos
# Creamos una instancia de la clase Derecho
Manuel = Derecho(26, 'Manuel Contreras') # Indicamos argumentos edad y nombre
# Llamamos al método y Manuel se presenta
Manuel.presentarse()
Soy Manuel Contreras tengo 26 años y estudio Derecho
Cómo ves asignamos al objeto «Manuel» la clase «Derecho» que hereda los atributos de «Estudiante». De lo contrario obtendremos un error porque los atributos nombre y edad pertenecen a Estudiante.
Recuerda que para declarar una clase lo hacemos utilizando el constructor __init__ y entre paréntesis los parámetros a los que les daremos argumentos a la hora de crear un objeto a partir de esta clase (instanciar).
class Nombredelaclase(object):
def __init__(self, parámetros):
# Declaración
Y si queremos que nuestra clase herede los atributos o métodos de otra clase principal (contiene el constructor init):
class Nombredelaclase(clasepadre):
# Declaraciones
Cuando creamos una clase hija no es necesario volver a incluir el constructor __init__ si la clase padre o principal ya lo contiene.
Clase base o padre
Para que sea posible la herencia de atributos y métodos de una clase, debe existir la superclase o clase principal de la cual la clase hija o secundaria va a heredar. Es decir, para que exista un hijo debe de existir un padre.
Supongamos que nosotros heredamos algunas virtudes y defectos de nuestros padres. Ellos serían nuestras clases primarias, o base. Y nosotros seríamos la secundaria o hija.
✅ Herencia Múltiple
Los casos de herencia múltiple en Python se dan cuando una clase secundaria o hija hereda atributos y métodos de más de una clase principal o padre. Basta con separar con una coma ambas principales a la hora de crear la clase secundaria:
class Nombredelaclase(clasepadre1, clasepadre2):
# Declaraciones
Esta clase hija habrá de heredar atributos y métodos de ambas clases (clasepadre1 y clasepadre2).
Veamos un ejemplo de herencia múltiple con el mismo código anterior pero creando ahora una clase correspondiente al instituto.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Creamos la clase padre
class Estudiante(object):
def __init__(self, edad, nombre):
# Definimos los parámetros edad y nombre
self.edad = edad # Declaramos que el atributo edad es igual al argumento edad
self.nombre = nombre # Declaramos que el atributo nombre es igual al argumento nombre
# Creamos otra clase padre
class Instituto(object):
def presentarinstituto(self):
# Método para presentar el instituto
print("Estudio en el Instituto de Leyes 112")
# Creamos la clase hija que hereda de Estudiante e Instituto
class Derecho(Estudiante, Instituto): # Herencia múltiple
def presentarse(self):
# Creamos el método presentarse
print(f"Soy {self.nombre}, tengo {self.edad} años y estudio Derecho") # Se presenta llamando los atributos
# Creamos una instancia de la clase Derecho
Manuel = Derecho(26, 'Manuel Contreras') # Indicamos argumentos edad y nombre
# Llamamos a los métodos
Manuel.presentarse() # Manuel se presenta
Manuel.presentarinstituto() # Manuel presenta su instituto
Soy Manuel Contreras tengo 26 años y estudio Derecho Estudio en el Instituto de Leyes 112
Como podemos ver la clase Derecho ahora hereda de la clase principal Estudiante e Instituto. Por eso aunque el objeto «Manuel» pertenezca a la clase Derecho, se nos permite utilizar el método «Manuel.presentarinstituto()» que corresponde a la clase Instituto.
➡️ Ventajas de la herencia múltiple en Python

Una de las principales ventajas es la reutilización de código, permitiéndonos establecer una relación entre clases evitando que sea necesario volver a declarar ciertos métodos o atributos.
Las clases nos permiten construir objetos sobre una colección de atributos y métodos definidos de forma abstracta. Y la capacidad de herencia nos permitirá crear clases secundarias más grandes y capaces, heredando múltiples atributos y métodos de otras, así como también más específicas, controlando los mismos para una única clase particular.
- Herencia simple: Una clase hija hereda de una única clase padre.
- Herencia múltiple: Una clase hija hereda de dos o más clases padres.
super(): Permite llamar a métodos de la clase padre.- Ventaja principal: Reutilización de código y jerarquía de clases.
🔍 Próximo paso: En la siguiente entrada veremos la función super() en detalle, que nos permite acceder a métodos de la clase padre de forma elegante.
📚 Para seguir el curso en orden, visita nuestra guía completa de Python básico.
📅 Última actualización: julio 28, 2026
