Herencia múltiple en python

En Python, una clase puede heredar de más de una clase.

Si una clase hereda, tiene los métodos y variables de la clases de padres.

En esencia, se llama herencia múltiple porque una clase puede heredar de varias clases. Este es un concepto de la programación orientada a objetos.

Si eres totalmente nuevo en la programación (orientada a objetos), te recomiendo el curso a continuación.

Introducción a herencia múltiple en python

La herencia es si un subclase obtiene todos los métodos y variables de un súper clase.

Los métodos y variables heredados se pueden usar en un objeto recién creado de la subclase.

En la imagen de arriba, la clase Estudiante hereda de la clase Persona.

Así que el método introduce() y variables firstname y lastname estará dentro de la clase Student.

Si crea un objeto de la clase Estudiante, puede acceder tanto a las variables como a los métodos de Estudiante y Persona.

En herencia múltiple, una clase obtiene todas las variables y métodos de más de un padre.

Herencia en python

Para hacer que una clase herede de una superclase, debe definir el paréntesis en la definición de clase

La herencia básica se realiza de esta manera en Python:

class A:
    def a(self):
        print('a')


class B(A):
    def b(self):
        print('b')


obj = B()
B.a()
B.b()

Ahora investiguemos la herencia múltiple, heredar de varias clases.

Herencia múltiple python

Entonces que es herencia múltiple en python?

En la herencia múltiple, una clase hereda de dos o más superclases.

Hereda los métodos y variables de todos súper clases.

Si crea un objeto, tiene todos los métodos y variables de las clases.

Veamos un ejemplo, donde una clase hereda de tres clases.

class Parent1:
    pass

class Parent2:
    pass

class Parent3:
    pass

class Kid1(Parent1, Parent2, Parent3):
    pass

Estas clases no tienen una implementación, pero muestran cómo usar la herencia múltiple.

Para hacer que una clase no sea parte de las clases, simplemente agréguelas después del paréntesis.

class Kid1(Parent1):
class Kid1(Parent1, Parent2):
class Kid1(Parent1, Parent2, Parent3):
class Kid1(Parent1, Parent2, Parent3, Parent4):
class Kid1(Parent1, Parent2, Parent3, Parent4, Parent5):

Agreguemos algunas variables a las clases:

>>> class Parent1:
...     x = 1
... 
>>> class Parent2:
...     y = 1
... 
>>> class Parent3:
...     z = 1
... 
>>> class Kid1(Parent1, Parent2, Parent3):
...     u = 2
...

Crear un nuevo objeto

Todas las variables están ahora disponibles:

>>> k.x
1
>>> k.y
1
>>> k.z
1
>>> k.u
2
>>>

Si eres un principiante de Python, te recomiendo este libro.

Ejemplo de herencia múltiple con python

Eche un vistazo a este ejemplo de herencia múltiple:

>>> class Worker:
...     title = ''
...     pay = ''
... 
>>> class TeamMember:
...     project = ''
... 
>>> class TeamLeader(TeamMember, Worker):
...     experience = ''

Puedes crear un objeto con cada clase.

Las variables que estarán disponibles dependen de la clase.

Las dos primeras clases no se heredan, por lo que solo están disponibles esas variables:

>>> bob = Worker()
>>> bob.
bob.pay    bob.title  

>>> jim = TeamMember()
>>> jim.project

Si crea un objeto usando la clase TeamLeader (herencia múltiple), tiene muchas variables disponibles.

>>> trevor = TeamLeader()
>>> trevor.
trevor.experience  trevor.pay         trevor.project     trevor.title

Los métodos también se pueden heredar, la clase TeamLeader a continuación hereda todos los métodos.

>>> class Worker:
...     title = ''
...     pay = ''
...     def setTitle(self, title):
...         self.title = title
...     def setPay(self, pay):
...         self.pay = pay
... 
>>> class TeamMember:
...     project = ''
...     def setProject(self, project):
...         self.project = project
... 
>>> class TeamLeader(TeamMember, Worker):
...     experience = ''
... 
>>> jim = TeamLeader()
>>> jim.setTitle("Team Lead")
>>> jim.setPay(900000)
>>> jim.setProject("Python Zen")

Métodos de herencia incorporados en Python

Python tiene algunos métodos que ayudan con la herencia.

El método esinstancia() devuelve un valor booleano que indica si un objeto es una instancia de una clase.

>>> obj = Boat()

>>> isinstance(obj, Car)
False
>>> isinstance(obj, Boat)
True

El método essubclase() prueba si una clase hereda de una clase o no.

>>> class Vehicle:
...     pass
... 
>>> class Car(Vehicle):
...     pass
... 

>>> issubclass(Vehicle, Car)
False
>>> issubclass(Car, Vehicle)
True

Si eres un principiante de Python, te recomiendo este libro.

Herencia multinivel en python

La herencia multinivel, no es lo mismo que herencia múltiple en python.

En multinivel hay varios niveles, que crean una relación de herencia.

Esto es similar a la relación entre abuelo, padre e hijo.

>>> class Grandpa:
...     x = 1
... 
>>> class Father(Grandpa):
...     y = 2
... 
>>> class Kid(Father):
...     z = 3
... 
>>> k = Kid()
>>> f"  "
'1 2 3'

Aquí cada clase solo hereda una vez, como máximo, pero heredan como una serie.

Estas dos clases heredan una vez:

>>> class Father(Grandpa):
>>> class Kid(Father):

Es por eso que llamamos a esto herencia multinivel.

El siguiente ejemplo muestra la herencia de varios niveles en un contexto diferente.

>>> class Vehicle:
...     engine = True


>>> class AutoMobile(Vehicle):
...     wheels = 4


>>> class Car(AutoMobile):
...     seats = 4
... 
>>> class Truck(AutoMobile):
...     seats = 2
...

Herencia múltiple frente a herencia multinivel python

Existen algunas diferencias clave entre la herencia múltiple y la herencia multinivel.

  • La herencia múltiple es cuando hay varias superclases
  • La herencia múltiple puede volverse compleja, por lo que no se usa mucho. Imagine la herencia de seis clases, ¿qué variables y métodos están disponibles? Rápidamente pierdes la visión general.
  • La herencia múltiple requiere una jerarquía de dos clases: hijo y padres
  • La herencia multinivel requiere al menos tres niveles de clases: abuelo, padre e hijos

Acá te dejo mas artículos sobre programación orientada a objetos python libro pdf:

¿ Te ayudo esta publicación Herencia múltiple?
⬇️ Te agradecería si compartes esta publicación.⬇️

5 comentarios en «Herencia múltiple en python»

  1. ¡Interesante artículo! ¿Realmente es útil la herencia múltiple en Python? ¡Quiero saber más!

  2. ¡Interesante artículo! ¿Creen que la herencia múltiple en Python pueda causar problemas de diseño?

  3. ¡Interesante artículo! ¿Creen que la herencia múltiple en Python puede complicar el código?

  4. ¡Interesante artículo! ¿Se puede evitar la complejidad de la herencia múltiple en Python? 🤔

    • ¡Claro que sí! Una forma de evitar la complejidad de la herencia múltiple en Python es utilizar la composición en lugar de la herencia. Esto permite una estructura más clara y flexible en el código. Vale la pena explorar esta alternativa. ¡Buena suerte! 👍

Los comentarios están cerrados.