Tipos de Herencia en Python | Herencia de Python [con ejemplo]

Publicado: 2021-02-09

Tabla de contenido

Introducción

La lucha por un código limpio es una batalla en la que participan todos los programadores. Y esa batalla se puede conquistar con una armadura adecuada de conceptos de programación orientada a objetos. Y la utilización adecuada de los conceptos de programación orientada a objetos nos ayuda a mejorar la reutilización del código, la legibilidad, la complejidad óptima del tiempo y el espacio.

Codificar en Python es súper divertido. Tiene una enorme cantidad de compatibilidad con bibliotecas, programación GUI orientada a objetos que lo convierte en un pastel caliente entre todos los lenguajes de programación.

La herencia es una de las características orientadas a objetos más utilizadas e implementarla en Python es una tarea entusiasta. Entonces, ¡comencemos ahora!

Lo primero es lo primero, comprendamos la definición de herencia.

Herencia

La herencia es un proceso de obtención de propiedades y características (variables y métodos) de otra clase. En este orden jerárquico, la clase que hereda otra clase se denomina subclase o clase secundaria, y la otra clase es la clase principal.

La herencia se clasifica según la jerarquía seguida y el número de clases principales y subclases involucradas.

Hay cinco tipos de herencias:

  1. Herencia Única
  2. Herencia múltiple
  3. Herencia multinivel
  4. Herencia jerárquica
  5. herencia híbrida

Herencia Única

Este tipo de herencia permite que una subclase o clase derivada herede propiedades y características de la clase principal, lo que evita la duplicación de código y mejora la reutilización del código.

#clase padre
clase arriba :
yo = 5
def fun1 (uno mismo):
print( "Hola, estás en la clase de padres" )

#subclase
clase Abajo (Arriba):
yo = 10
def fun2 (uno mismo):
print ( "Hola, estás en la subclase" )

temp1=Abajo()
temp2=Arriba()
temp1.fun1()
temp1.fun2()
temp2.fun1()
imprimir (temp1.i)
imprimir (temp2.i)
#temp2.diversión2()

Muy bien, analicemos el código anterior.

En el código anterior, "Arriba" es la clase principal y "Abajo" es la clase secundaria que hereda la clase principal. Implementar la herencia en python es una tarea simple, solo necesitamos mencionar el nombre de la clase principal entre paréntesis de la clase secundaria. Estamos creando objetos tanto de la clase principal como de la clase secundaria, y aquí viene un punto interesante sobre la herencia. Una clase secundaria puede acceder a los métodos y variables de la clase principal, mientras que lo contrario no es cierto.

Entonces, en el código anterior, el objeto temp1 puede acceder a los métodos fun1 y fun2, mientras que el objeto temp2 solo puede acceder al método fun1. De manera similar, la misma regla se aplica a las variables en el código. Y acceder a un método o variable de clase secundaria desde un objeto de clase principal generará un error. Si la última línea del código no está comentada, genera un error.

Herencia múltiple

Esta herencia permite que una clase secundaria herede de más de una clase principal. Las clases de Java no admiten este tipo de herencia, pero Python sí admite este tipo de herencia. Tiene una gran ventaja si tenemos el requisito de reunir múltiples características de diferentes clases.

#clase padre 1
clase A :
demostración1= 0
def fun1 (uno mismo):
imprimir(self.demo1)

#clase padre 2
clase B :
demostración2= 0
def fun2 (uno mismo):
imprimir(self.demo2)

#clase infantil
clase C (A, B):
def fun3 (uno mismo):
print( "Hola, estas en la clase de niños" )

# Código principal
c = c()
c.demo1 = 10
c.demo2 = 5
c.fun3()
imprimir ( "primer número es: " , c.demo1)
imprimir ( "el segundo número es: " , c.demo2)

En el código anterior, hemos creado dos clases principales "A", "B". Siguiendo la sintaxis de la herencia en python, hemos creado una clase secundaria, que hereda ambas clases "A" y "B". Como se discutió anteriormente, una clase secundaria puede acceder a los métodos y variables de la clase principal, la clase secundaria "C" puede acceder a los métodos de su clase principal.

Herencia multinivel

En la herencia multinivel, la transferencia de las propiedades de las características se realiza a más de una clase de forma jerárquica. Para tener una mejor visualización podemos considerarlo como una relación ancestro a nietos o una raíz a hoja en un árbol con más de un nivel.

#clase padre 1
vehículo de clase :
def funcionamiento (auto):
print( “los vehículos se utilizan para el transporte” )

#niño clase 1
coche de clase (vehículo):
ruedas def (auto):
print( “un carro tiene 4 ruedas” )

#niño clase 2
clase electric_car (coche):
def especialidad (auto):
print( “coche eléctrico funciona con electricidad” )

eléctrico=coche_eléctrico()
especialidad.electricidad()
ruedas.electricas()
funcionamiento.eléctrico()

Realizando un simulacro con el código anterior, creamos una clase de "vehículo", luego creamos un automóvil de clase que hereda la clase de vehículo. Ahora el "vehículo" es una clase principal y el "coche" es una clase secundaria. Más tarde hemos creado una clase "electric_car", ahora la clase car es una clase principal y la clase electric_car es una clase secundaria, y la relación entre la clase de vehículo y la clase electric_car es la herencia multinivel.

Aquí, la clase electric_car puede acceder a los métodos, las variables tanto del vehículo como de la clase de automóvil, mientras que la clase de automóvil puede acceder solo a los métodos, las variables de la clase de vehículo. Y como se discutió, el vehículo de la clase principal no puede acceder a ningún método de la clase secundaria.

Herencia jerárquica

Esta herencia permite que una clase se aloje como clase principal para más de una clase o subclase secundaria. Esto proporciona el beneficio de compartir el funcionamiento de los métodos con múltiples clases secundarias, evitando así la duplicación de código.

#clase padre
padre de la clase :
def fun1 (uno mismo):
print( "Hola, estás en la clase de padres" )

#niño clase 1
clase child1 (Padre):
def fun2 (uno mismo):
print ( "Hola, estás en la clase infantil 1" )

#niño clase 2
clase child2 (Padre):
def fun3 (uno mismo):
print( "Hola, estas en la clase infantil 2" )

#niño clase 3
clase child3 (Padre):
def fun4 (uno mismo):
print( “Hola, estás en la clase infantil 3” )

# programa principal
niño_obj1 = niño3()
niño_obj2 = niño2()
niño_obj3 = niño1()
child_obj1.fun1()
child_obj1.fun4()
child_obj2.fun1()
niño_obj2.fun3()
child_obj3.fun1()
child_obj3.fun2()

En el código anterior, tenemos una sola clase principal y varias clases secundarias que heredan la misma clase principal. Ahora todas las clases secundarias pueden acceder a los métodos y variables de la clase principal. Hemos creado una clase "Padre" y 3 clases secundarias "child1", "child2", "child3", que hereda la misma clase padre "Parent".

Pago: Ideas de proyectos de código abierto de Python

herencia híbrida

Una herencia se dice herencia híbrida si se implementa más de un tipo de herencia en el mismo código. Esta función permite al usuario utilizar la función de herencia de la mejor manera. Esto satisface el requisito de implementar un código que necesita múltiples herencias en la implementación.

clase A:
def fun1 (uno mismo):
print(“Hola, estás en la clase A”)clase B(A):
def fun2(uno mismo):
print(“Hola, estás en la clase B”)clase C(A):
def fun3(uno mismo):
print(“Hola, estás en la clase C”)clase D(C,A): #línea 13
def fun4(uno mismo):
print(“Hola, estás en la clase D”)#programa principal
referencia = D()
ref.fun4()
ref.fun3()
ref.fun1()

En el código anterior, podemos ver que hemos implementado más de un tipo de herencia. Las clases A, B, C implementan herencia jerárquica y las clases A, C, D implementan herencia multinivel. Noe, esas herencias individuales tienen sus propiedades individuales de acceso a métodos y variables de la clase principal. Además, hay un punto a tener en cuenta.

Cuando implementamos la herencia multinivel, seguimos una sintaxis como "child_class (parent_class1, parent_class2)". Pero esta sintaxis generará un error si "parent_class1" está jerárquicamente por encima de "parent_class2". Si queremos implementar esta sintaxis, entonces "parent_class1" debe estar en un nivel jerárquicamente más bajo que "parent_class2". Por ejemplo, en el código anterior, si la línea 13 tiene una clase de sintaxis D (A, C), entonces el código no funcionaría ya que la clase C es jerárquicamente inferior a la clase A.

Aprenda cursos de ciencia de datos de las mejores universidades del mundo. Obtenga programas Executive PG, programas de certificados avanzados o programas de maestría para acelerar su carrera.

Leer: Temas e ideas de proyectos de Python

Conclusión

Hemos repasado los usos y necesidades de la herencia y entendido la definición de herencia. Además, hemos repasado los tipos de herencia y repasado los códigos de implementación y las explicaciones de cada tipo de herencia. Entendió las reglas de acceso a variables y métodos en diferentes tipos de herencias.

Ahora que conoce los diferentes tipos de herencias en python, intente implementarlas e intente utilizarlas en su código. Intente optimizar su código con la utilización adecuada de la herencia.

Si tiene curiosidad por aprender sobre ciencia de datos, consulte el Diploma PG en ciencia de datos de IIIT-B y upGrad, creado para profesionales que trabajan y ofrece más de 10 estudios de casos y proyectos, talleres prácticos, tutoría con expertos de la industria, 1- on-1 con mentores de la industria, más de 400 horas de aprendizaje y asistencia laboral con las mejores empresas.

¿Cuál es la diferencia entre herencia múltiple y herencia multinivel?

Muchos programadores principiantes a menudo se confunden entre la herencia múltiple y la herencia multinivel. A continuación se ilustran algunas de las diferencias significativas entre estos dos tipos de herencia.
Herencia múltiple -
1. Cuando una clase hija hereda sus propiedades y características de más de una clase base, este tipo de herencia se conoce como Herencia Múltiple.
2. No se usa mucho ya que la Herencia Múltiple puede ser bastante compleja de entender.
3. Tiene solo dos niveles de clase: clase base y clase derivada.
Herencia multinivel
1. La herencia en la que una clase secundaria hereda las propiedades de su clase base, que además hereda las propiedades de otra clase base, convirtiendo a la primera en una clase secundaria, se conoce como herencia multinivel.
2. Esta herencia tiene grandes propósitos y, por lo tanto, se usa mucho.
3. Tiene al menos tres niveles de clase: clase base, clase intermedia y clase derivada.

¿Qué entiendes sobre la herencia híbrida?

La herencia híbrida es un tipo único de herencia. Más que tener un concepto nuevo, como su nombre lo indica, es una combinación de dos o más tipos de herencias. Por ejemplo, una clase que muestra herencias múltiples y multinivel es un ejemplo de herencia híbrida.

¿Qué sabes sobre los modificadores de acceso en Python?

En Python, hay 3 tipos de modificadores de acceso que se mencionan a continuación:
1. Modificador de acceso público: los miembros públicos de una clase son accesibles desde cualquier parte del programa. En Python, si no se especifica el especificador de acceso de miembros de datos o funciones miembro, entonces es público de forma predeterminada.
2. Modificador de acceso protegido : si un miembro de datos o una función de miembro se define como protegido, solo las clases derivadas de esa clase pueden acceder a él.
3. Modificador de acceso privado: el modificador de acceso privado es el especificador de acceso más seguro. Los miembros privados solo son accesibles dentro de la clase en la que están definidos.