Curso de Python. POO VIII. Herencia III. Vídeo 31
Introducción al tema de la herencia en programación orientada a objetos
Resumen de la sección: En esta sección del curso de programación en Python, se aborda el tema de la herencia dentro de la programación orientada a objetos. Se hace referencia al concepto de herencia múltiple y se mencionan dos funciones importantes para trabajar con la herencia: super e instance.
Uso de las funciones super e instance
- La función
superpermite llamar al método de la clase padre en cualquier parte del código.
- Ejemplo:
- La función
instancetambién es utilizada en el contexto de la herencia.
- Ejemplo:
Preferencia en caso de herencia múltiple
- Cuando hay herencia múltiple, se le da preferencia a la clase que está más a la izquierda.
- Ejemplo:
Problema con métodos con el mismo nombre
- Si existen métodos con el mismo nombre en las clases involucradas en una herencia múltiple, se utilizará el método correspondiente a la clase más a la izquierda.
- Ejemplo:
Solución elegante utilizando la función super
- Para evitar conflictos con los parámetros pasados a un objeto que pertenece a una clase con herencia múltiple, se puede utilizar la función
super.
- Ejemplo:
Uso práctico de la función super
- Se muestra un ejemplo sencillo para comprender mejor cómo funciona y cómo aplicar correctamente la función
super.
- Ejemplo:
Creación de clases y objetos
- Se crea una clase "Persona" y una clase "Empleado" para construir objetos con características específicas.
- Ejemplo:
Constructor de la clase "Persona"
- Se define el constructor de la clase "Persona" con los parámetros nombre, edad y lugar de residencia.
- Ejemplo:
Inicialización de los parámetros en el constructor
- Dentro del constructor, se inicializan los parámetros pasados al objeto.
- Ejemplo:
Uso de la función super en herencia avanzada
Resumen de la sección: En esta sección, se profundiza en el uso de la función super en casos más complejos de herencia.
Implementación del método constructor utilizando super
- Se muestra cómo utilizar la función
superen el método constructor para evitar repeticiones innecesarias.
- Ejemplo:
Continuación del ejemplo anterior
- Se retoma el ejemplo anteriormente mencionado para aplicar el uso correcto de la función
super.
- Ejemplo:
Ventajas del uso de super
- El uso adecuado de la función
superpermite un código más limpio y evita duplicaciones innecesarias.
- Ejemplo:
Creación de la clase Persona
Resumen de la sección: En esta sección, se crea la clase "Persona" con un constructor que recibe parámetros como nombre, edad y lugar de residencia. Además, se agrega un método llamado "descripción" que imprime en consola los valores de las propiedades de una persona.
Creación de la clase Persona
- Se crea la clase "Persona" con un constructor que recibe parámetros como nombre, edad y lugar de residencia.
- Se agrega el método "descripción" a la clase Persona, el cual imprime en consola los valores de las propiedades (nombre, edad y lugar de residencia).
Creación de la clase Empleado
Resumen de la sección: En esta sección, se crea la clase "Empleado" que hereda las propiedades y métodos de la clase "Persona". Además, se agregan nuevas propiedades como salario y antigüedad.
Creación de la clase Empleado
- Se crea la clase "Empleado" con un constructor que recibe parámetros como salario y antigüedad.
- La clase Empleado hereda las propiedades (nombre, edad y lugar de residencia) y el método descripción() de la clase Persona.
Relación entre Empleado y Persona
Resumen de la sección: En esta sección, se establece que un empleado es una persona además de tener características adicionales como salario y antigüedad.
Relación entre Empleado y Persona
- Un empleado es una persona, por lo tanto, también tiene propiedades como nombre, edad y lugar de residencia.
Creación de objetos de tipo Persona y Empleado
Resumen de la sección: En esta sección, se crean objetos de tipo Persona y Empleado utilizando el constructor correspondiente y se asignan valores a las propiedades.
Creación de objetos de tipo Persona y Empleado
- Se crea un objeto de tipo Persona llamado "Antonio" con nombre, edad y lugar de residencia especificados.
- Se crea un objeto de tipo Empleado llamado "Antonio" con salario y antigüedad especificados.
Uso del método descripción()
Resumen de la sección: En esta sección, se muestra cómo utilizar el método descripción() para imprimir las características del objeto creado.
Uso del método descripción()
- Se utiliza el método descripción() para imprimir las características del objeto "Antonio".
Problemas al crear un objeto Empleado
Resumen de la sección: En esta sección, se presentan problemas al intentar crear un objeto Empleado debido a los parámetros requeridos por su constructor.
Problemas al crear un objeto Empleado
- Al intentar crear un objeto Empleado sin proporcionar los parámetros correctos (nombre, edad y lugar de residencia), ocurre un error en el constructor.
- Si solo proporcionamos los parámetros requeridos por el constructor del objeto Empleado (salario y antigüedad), el código puede parecer que funciona, pero se produce un error al intentar utilizar el método descripción().
Conclusion
En este video se muestra cómo crear clases en Python utilizando la herencia. Se crea una clase "Persona" con propiedades como nombre, edad y lugar de residencia, y un método para imprimir una descripción de la persona. Luego se crea una clase "Empleado" que hereda las propiedades de "Persona" y agrega nuevas propiedades como salario y antigüedad. Se explora la relación entre Empleado y Persona, y se muestran ejemplos de creación de objetos utilizando los constructores correspondientes. También se abordan los problemas que pueden surgir al crear objetos Empleado sin proporcionar los parámetros correctos.
Problema con la bicicleta eléctrica y la clase Empleado
Resumen de la sección: En esta sección, se aborda el problema de que una bicicleta eléctrica no puede tener marca y modelo, al igual que un objeto de la clase Empleado no puede tener nombre, edad y lugar de residencia. Se propone solucionar este problema utilizando la instrucción super dentro del constructor.
Solución utilizando la instrucción super
- La instrucción
superllama al método__init__de la clase padre.
- Al incluir
super().__init__(nombre, edad, residencia)dentro del constructor de la clase Empleado, se ejecuta primero el método__init__de la clase padre.
- Los valores pasados como argumentos en
super().__init__(nombre, edad, residencia)se asignan a las variables correspondientes en la clase padre.
Mejorando los valores fijos y descripción
Resumen de la sección: En esta sección, se plantea mejorar los valores fijos utilizados en el constructor de la clase Empleado y también mejorar el método descripción para mostrar información adicional sobre salario y antigüedad.
Mejorando los valores fijos
- Se modifica el constructor de la clase Empleado para recibir además del salario y antigüedad, un nombre empleado, una edad empleado y una residencia empleado.
- Estos nombres de parámetros son utilizados en lugar de los valores fijos anteriores al llamar al constructor de la clase padre.
- Ahora es necesario pasar cinco argumentos al crear un objeto tipo Empleado.
Mejorando el método descripción
- Se redefine el método descripción para que reciba un
selfy haga uso de la funciónsuperllamando al método de la clase padre.
- Se agrega la impresión del salario y antigüedad utilizando los atributos correspondientes (
self.salarioyself.antiguedad).
- Se agregan textos descriptivos antes de imprimir los valores.
Mejorando la descripción con salario y antigüedad
Resumen de la sección: En esta sección, se mejora aún más el método descripción para incluir información sobre el salario y antigüedad en la empresa.
Reescribiendo el método descripción
- Se redefine el método descripción para que reciba un
self.
- Se utiliza la función
superpara llamar al método de la clase padre.
- Se agrega una impresión del salario utilizando
self.salario.
- Se agrega una impresión de la antigüedad utilizando
self.antiguedad.
- Se añaden textos descriptivos antes de imprimir los valores.
Ahorro de tiempo con el uso de super
Resumen de la sección: En esta sección, se explica cómo el uso de super en la herencia nos permite ahorrar tiempo al evitar tener que repetir código innecesariamente. Se menciona que al utilizar super, no es necesario inicializar todas las variables de clase nuevamente, lo cual ahorra tiempo y hace que el programa sea más eficiente.
- El uso de
superevita tener que iniciar todas las variables de clase nuevamente.
- En el ejemplo dado, se muestra cómo al utilizar
super, no es necesario repetir la línea de código para la descripción.
- El ahorro de tiempo con el uso de
superes especialmente útil en programas más complejos con múltiples clases y herencia.
Ejemplo sencillo del uso de super
Resumen de la sección: En esta sección, se muestra un ejemplo sencillo del uso de super en un programa. Se ejecuta el programa y se comprueba que funciona correctamente. Se destaca que al utilizar super, podemos acceder a los atributos y métodos tanto de la clase padre como de la clase hija.
- Se ejecuta el programa y se verifica su funcionamiento sin problemas.
- Al utilizar
super, podemos acceder a los atributos y métodos tanto de la clase padre como de la clase hija.
- En este ejemplo sencillo, no hay complicaciones debido a la herencia, pero en programas más complejos puede ser útil para evitar confusiones.
Problemas con herencia y múltiples clases
Resumen de la sección: En esta sección, se menciona que en programas más complejos con múltiples clases y herencia, puede haber problemas al construir una instancia debido a la herencia. Se destaca que el principio de sustitución es importante para determinar si un objeto pertenece a una clase o a otra.
- En programas más complejos con múltiples clases y herencia, puede ser difícil determinar si una instancia pertenece a una clase específica.
- El principio de sustitución establece que un objeto de la subclase siempre será un objeto de la superclase.
- Es importante utilizar el principio de sustitución para verificar si el diseño de herencia en un programa es correcto.
Principio de sustitución en herencia
Resumen de la sección: En esta sección, se explica en qué consiste el principio de sustitución en aplicar los términos en español. Se menciona que el principio de sustitución establece que un objeto de la subclase siempre será un objeto de la superclase. Se destaca que esto es útil para comprobar si un diseño de herencia en un programa está bien creado.
- El principio de sustitución establece que un objeto de la subclase siempre será un objeto de la superclase.
- Un empleado siempre es una persona según el principio de sustitución.
- Este principio se utiliza para comprobar si un diseño de herencia en un programa está correctamente implementado.
Uso del método isinstance
Resumen de la sección: En esta sección, se introduce el método isinstance en Python, el cual permite verificar si un objeto es instancia de una clase determinada. Se menciona que este método es útil cuando se trabaja con programas complejos y no se tiene claridad sobre a qué clase pertenece un objeto.
- El método
isinstancepermite verificar si un objeto es instancia de una clase determinada.
- Es útil cuando se trabaja con programas complejos y no se sabe a qué clase pertenece un objeto.
- El método
isinstancedevuelveTruesi el objeto pertenece a la clase especificada, yFalsesi no.
Ejemplo del uso de isinstance
Resumen de la sección: En esta sección, se muestra un ejemplo del uso de la función isinstance. Se crea un objeto de tipo empleado y se utiliza isinstance para comprobar si pertenece a las clases empleado y persona. Se destaca que debido al principio de sustitución, el objeto empleado también es considerado como una persona.
- Se crea un objeto de tipo empleado llamado "manuel".
- Se utiliza la función
isinstancepara comprobar si "manuel" es instancia de las clases empleado y persona.
- Debido al principio de sustitución, "manuel" es considerado tanto empleado como persona según los resultados obtenidos con
isinstance.
Verificación del principio de sustitución
Resumen de la sección: En esta sección, se verifica nuevamente el principio de sustitución utilizando la función isinstance. Se comprueba que el objeto "manuel" es instancia tanto de la clase empleado como de la clase persona. Luego, se cambia el tipo del objeto "manuel" a persona y se comprueba que ya no es instancia de la clase empleado.
- Se verifica nuevamente el principio de sustitución utilizando la función
isinstance.
- El objeto "manuel" es instancia tanto de la clase empleado como de la clase persona.
- Al cambiar el tipo del objeto "manuel" a persona, ya no es instancia de la clase empleado según los resultados obtenidos con
isinstance.
Uso de super en un ejemplo práctico
Resumen de la sección: En esta sección, se plantea un ejemplo práctico donde se desea agregar atributos marca y modelo a una bicicleta eléctrica utilizando herencia. Se menciona que para lograr esto, se debe utilizar super en el constructor de la clase hija para llamar al constructor de la clase padre y pasarle los atributos adicionales.
- Se plantea un ejemplo práctico donde se desea agregar atributos marca y modelo a una bicicleta eléctrica.
- Para lograr esto, se utiliza
superen el constructor de la clase hija para llamar al constructor de la clase padre.
- Los atributos adicionales (marca y modelo) son pasados al constructor de la clase padre mediante el uso de
super.
Cambios en la Clase Vehículos
Resumen de la sección: En esta parte del video, se realizan cambios en el programa para corregir errores y completar la descripción. La marca viaja desde el constructor de la clase padre (Vehículos) al constructor de la clase hija.
Actualizaciones en el Programa
- Se ejecuta el programa sin errores.
- No se muestra la descripción porque aún no ha sido completada.
- La marca viaja al constructor de la clase padre (Vehículos).
- El modelo se inicializa correctamente en el constructor de la clase padre.