Menu
Coddy logo textTech

Herencia múltiple

Parte de la sección Object Oriented Programming del Journey de Python de Coddy — lección 20 de 64.

La herencia múltiple permite que una clase herede de más de una clase padre, combinando funcionalidad de diferentes fuentes.

Aquí hay dos clases padre:

class Animal:
    def __init__(self, name):
        self.name = name
    
    def eat(self):
        return f"{self.name} is eating"

class Flyable:
    def fly(self):
        return f"{self.name} is flying"

Crea una clase hija que herede de ambos padres:

class Bird(Animal, Flyable):
    def __init__(self, name, species):
        super().__init__(name)  # Llama al __init__ de Animal
        self.species = species
    
    def sing(self):
        return f"{self.name} is singing"

La sintaxis class Bird(Animal, Flyable): significa que Bird hereda tanto de Animal como de Flyable.

Crea un objeto pájaro y usa métodos de ambos padres:

sparrow = Bird("Sparrow", "House sparrow")

Llama a los métodos de la primera clase padre:

print(sparrow.eat())

Llamar a los métodos de la segunda clase padre:

print(sparrow.fly())

Llama al propio método del pájaro:

print(sparrow.sing())

Salida:

Sparrow is eating
Sparrow is flying
Sparrow is singing

Puedes comprobar el orden de herencia:

print(Bird.__mro__)  # Orden de resolución de métodos

Esto muestra qué padre se comprueba primero al buscar métodos.

Punto clave: La herencia múltiple utiliza la sintaxis class Child(Parent1, Parent2):. La clase hija obtiene todos los métodos de todas las clases padre. Python busca en los padres de izquierda a derecha al buscar métodos.

challenge icon

Desafío

Intermedio

En este desafío, implementarás un sistema de clases de múltiples archivos que demuestra la herencia múltiple con teléfonos inteligentes. Cada clase está organizada en su propio archivo para una mejor organización del código.

Necesitarás editar estos archivos:

  • device.py - Implementa la clase base Device
  • internet.py - Implementa la clase base Internet
  • smartphone.py - Implementa la clase Smartphone que hereda de ambas clases base
  • driver.py - Implementa casos de prueba que verificarán que tu implementación funcione correctamente

Cada archivo contiene comentarios TODO detallados que te guiarán paso a paso a través de la implementación.

Hoja de referencia

La herencia múltiple permite que una clase herede de más de una clase padre utilizando la sintaxis class Child(Parent1, Parent2):

class Animal:
    def __init__(self, name):
        self.name = name
    
    def eat(self):
        return f"{self.name} is eating"

class Flyable:
    def fly(self):
        return f"{self.name} is flying"

class Bird(Animal, Flyable):
    def __init__(self, name, species):
        super().__init__(name)  # Llama al __init__ de Animal
        self.species = species
    
    def sing(self):
        return f"{self.name} is singing"

La clase hija hereda todos los métodos de todas las clases padre:

sparrow = Bird("Sparrow", "House sparrow")
print(sparrow.eat())   # De la clase Animal
print(sparrow.fly())   # De la clase Flyable
print(sparrow.sing())  # Método propio de Bird

Consulta el Orden de Resolución de Métodos (MRO) para ver qué padre se comprueba primero:

print(Bird.__mro__)  # Muestra el orden de herencia

Pruébalo tú mismo

# TODO: Importar la clase Smartphone desde smartphone.py

# Crear un smartphone y probar sus métodos
# TODO: Crear un objeto Smartphone con marca "Apple" y modelo "iPhone 13"
my_phone = None

# TODO: Llamar e imprimir el método power_on() del smartphone

# TODO: Llamar e imprimir el método connect() del smartphone

# TODO: Llamar e imprimir el método make_call() del smartphone con el parámetro "123-456-7890"
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Object Oriented Programming