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 singingPuedes comprobar el orden de herencia:
print(Bird.__mro__) # Orden de resolución de métodosEsto 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.
Desafío
IntermedioEn 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 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 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 BirdConsulta el Orden de Resolución de Métodos (MRO) para ver qué padre se comprueba primero:
print(Bird.__mro__) # Muestra el orden de herenciaPrué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"Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Object Oriented Programming
1Fundamentos de la POO
Archivos externosIntroducción a la POOClases vs ObjetosEl parámetro selfMétodosAtributosMétodo constructor (__init__)Resumen - Calculadora simple4Herencia
Herencia básicaLa función super()Sobrescritura de métodosHerencia múltipleOrden de resolución de métodosResumen - 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 propertyDecorador de métodos estáticosDecorador de métodos de clase5Polimorfismo
Sobreescritura de métodos revisitadaDuck TypingClases y métodos abstractosDiseño de interfacesResumen - Calculadora de figuras8Conceptos avanzados de POO
Composición vs. 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 de claseDecoradores de propiedadesAtributos privadosResumen - Gestor de cuentas bancarias