Herencia múltiple
Parte de la sección Programación orientada a objetos 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 funcionalidades de diferentes fuentes.
Aquí hay dos clases principales:
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 método __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 de ave y usa métodos de ambos padres:
sparrow = Bird("Sparrow", "House sparrow")Llama a métodos de la primera clase padre:
print(sparrow.eat())Llama a métodos de la segunda clase padre:
print(sparrow.fly())Llama al método propio del pájaro:
print(sparrow.sing())Salida:
Sparrow is eating
Sparrow is flying
Sparrow is singingPuedes comprobar el orden de herencia:
print(Bird.__mro__) # Orden de resolución de métodosEsto muestra qué clase padre se comprueba primero al buscar métodos.
Punto clave: la herencia múltiple usa la sintaxis class Child(Parent1, Parent2):. La clase hija obtiene todos los métodos de todas las clases padre. Python comprueba las clases padre de izquierda a derecha al buscar métodos.
Desafío
IntermedioEn este desafío, implementarás un sistema de clases con varios archivos que demuestra la herencia múltiple mediante teléfonos inteligentes. Cada clase está organizada en su propio archivo para mejorar la organización del código.
Tendrás que editar estos archivos:
device.py- Implementa la clase baseDeviceinternet.py- Implementa la clase baseInternetsmartphone.py- Implementa la claseSmartphoneque hereda de ambas clases basedriver.py- Implementa casos de prueba que verificarán que tu implementación funcione correctamente
Cada archivo contiene comentarios detallados de TODO que te guiarán paso a paso en la implementación.
Pruébalo tú mismo
# TODO: Importa la clase Smartphone desde smartphone.py
# Crea un smartphone y prueba sus métodos
# TODO: Crea un objeto Smartphone con la marca "Apple" y el modelo "iPhone 13"
my_phone = None
# TODO: Llama al método power_on() del smartphone e imprime su resultado
# TODO: Llama al método connect() del smartphone e imprime su resultado
# TODO: Llama al método make_call() del smartphone con el parámetro "123-456-7890" e imprime su resultadoEsta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Programación orientada a objetos
1Fundamentos de la POO
Introducción a la POOArchivos externosClases vs. objetosEl parámetro selfMétodosAtributosMétodo constructor (__init__)Repaso: calculadora sencilla4Herencia
Herencia básicaLa función super()Sobrescritura de métodosHerencia múltipleOrden de resolución de métodosRepaso: jerarquía de empleados7Métodos especiales
Introducción a los métodos mágicosSobrecarga de operadoresMétodos mágicos de contenedoresRepaso: lista personalizada10Patrones de diseño, parte 1
Introducción a los patrones de diseñoPatrón SingletonPatrón FactoryPatrón ObserverPatrón Strategy2Decoradores
Introducción a los decoradoresDecorador de propiedadDecorador de método estáticoDecorador de método de clase5Polimorfismo
Repaso de la sobrescritura de métodosTipado patoClases y métodos abstractosDiseño de interfacesRepaso: calculadora de formas8Conceptos avanzados de POO
Composición frente a herenciaMixinsMétodos estáticos y de claseDecoradores de claseGestores de contexto11Patrones de diseño, parte 2
Patrón CommandPatrón AdapterPatrón DecoratorPatrón Template MethodPatrón StatePatrón Composite3Propiedades de clase
Variables de instancia vs. variables de claseDecoradores de propiedadesAtributos privadosRepaso: gestor de cuentas bancariasPractica por tu cuenta: Compilador de Python online