Herencia simple y múltiple – Python – OOP

Siguiendo con programación orientada a objetos en Python (OOP) vamos a ver Herencia simple y múltiple.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.

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 (f"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 (f"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 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 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.


Descansando en la nube: login offEsto 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! 🙂

 

 


 

Sigue leyendo!
Entrada anterior! Siguiente entrada!

Compartir es agradecer! :)

8 comentarios en “Herencia simple y múltiple – Python – OOP”

  1. Magnífico trabajo. Muy bien explicado, muy didáctico. Tienes toda mi admiración. Enhorabuena.
    Soy muy muy novato en esto, y quisiera hacer una pequeña pregunta, que espero no sea impertinente: ¿No sería más legible algo así?
    print (f”Soy {self.nombre} tengo {self.edad} años y estudio Derecho”)

    1. Hola @carles_garrigues:disqus muchas gracias!. Claro que sería mejor incluir formateo, en los tiempos que redacte la entrada no los añadí porque aún no había desarrollado formatos si no me equivoco y no quería incluir lo que no había redactado con anterioridad..
      Ahora añado tu recomendación!. Gracias por leer el blog, mis saludos!

  2. Jose Maria Carrascal Rojo

    Buenas, estoy empezando a aprender Python con tu blog. Y me ha quedado la duda de porque para que se imprima por pantalla los argumentos tenemos que escribir una f en el inicio del print(….). No sé si lo explicaras más adelante porque voy entrada a entrada, y creo que no lo has explicado en alguna antes, pero creo que vendría bien un pequeño comentario. Gracias y un saludo,eres un crack.

    1. Hola @josemariacarrascalrojo:disqus es solo para darle formato a las cadenas de caracteres (llamadas f-strings).. Al igual que puedes usar “.format”. Lamentablemente no he dedicado una entrada a fstring pero si a Format en python. Tal vez lo añada en esa misma entrada, gracias por tu comentario y te deseo buena suerte en tu aprendizaje!. Happy coding!

  3. Luis Alberto Quintero Laguna

    La verdad Amigo, tienes un Don que debes explotar, el don de la pedagogia, enseñar y no quedarte con el conocimiento, leia con detalle tus explicaciones y de verdad me quito el sombrero, eres muy explicativo y detallista, quien este dispuesto a aprender como es mi caso te seguiremos y recomendaremos…. Saludos

    1. Gracias @luisalbertoquinterolaguna:disqus la verdad estos comentarios me inspiran a seguir este camino, muchas gracias por tomarte el tiempo de agradecer! Un saludo cordial y mucha suerte en tu aprendizaje!

Hey no te vayas sin dejarme un comentario!

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Aprende a programar de manera profesional!

¿Todavía sin obtener una retribución justa de tu aprendizaje?

Curso de Python Udemy

Convierteté en un verdadero Jedy de Python y comienza a desarrollar aplicaciones de forma profesional obteniendo un certificado de Udemy!. Pasate por la sección de Cursos Premium y realiza los mejores cursos con certificación válida a nivel internacional por apenas unos dolares!