Siguiendo con programacion orientada a objetos en Python (OOP) vamos a ver Herencia simple y múltiple.
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.
Herencia simple vs Herencia Multiple
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 -*- # class Estudiante(object): #Creamos la clase padre 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 class Derecho (Estudiante): #Entre paréntesis indicamos la clase padre o principal ESTUDIANTE #Lo que la convierte a DERECHO en una clase hija o secundaria def presentarse(self): #Creamos el método presentarse print (("""Soy"""), (self.nombre), ('tengo'), (self.edad), ('años'),("""y estudio Derecho""")) #Se presenta llamando los atributos Manuel = Derecho(26, 'Manuel Contreras') #Indicamos argumentos edad y nombre Manuel.presentarse() # Llamamos al método y Manuel se presenta
Resultado:
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 asignarle la clase a algún objeto.
Class Nombredelaclase(object):
def constructor_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 metodos de mas 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 metodos 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 -*- # class Estudiante(object): #Creamos la clase padre 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 class Instituto(object): def presentarinstituto (self): print("""Estudio en el Instituto de Leyes 112""") class Derecho (Estudiante, Instituto): #Entre paréntesis indicamos la clase padre o principal ESTUDIANTE #Lo que la convierte a DERECHO en una clase hija o secundaria def presentarse(self): #Creamos el método presentarse print (("""Soy"""), (self.nombre), ('tengo'), (self.edad), ('años'),("""y estudio Derecho""")) #Se presenta llamando los atributos Manuel = Derecho(26, 'Manuel Contreras') #Indicamos argumentos edad y nombre Manuel.presentarse() # Llamamos al método y Manuel se presenta Manuel.presentarinstituto()
Resultado:
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
Una de las principales ventajas es la re utilizació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 mas especificas controlando los mismos para una única clase particular.
Esto ha sido todo y espero hayas logrado comprender algo de herencia múltiple en python, si aún no has visto clases te recomiendo pasarte por la entrada anterior. Hasta luego! Bye bye! Ha y no olvides dejar un comentario o suscribirte a mi blog! 🙂