La herencia es como en la vida real, imaginemos un padre que tiene una propiedad, este padre tiene dos hijos, pues, cuando el padre fallezca, su propiedad es repartida entre sus hijos, quiere decir que los hijos heredan.
En Python, una herencia es el proceso por el cual se puede crear una clase hija (subclase) que hereda una clase padre (superclase) compartiendo sus métodos y atributos.
Es posible que podamos crear objetos similares, pues, en vez de definir un montón de clases, podemos tomar elementos comunes y crear una clase de la que hereda el resto, por ejemplo, tenemos un coche y un camión, ¿Qué características tienen en común?, pues, puede ser la marca, el número de ruedas, el color, y, ¿qué comportamientos tienen en común?, pues ambos arrancan, aceleran, frenan.
Veamos un ejemplo.
Creamos una clase llamada personas, que es clase padre.
Creamos un constructor, donde pasamos dos parámetros, que son género y edad.
Creamos una variable e igualamos a género, creamos otra variable, e, igualamos a edad.
Tenemos el género, ya que todas las personas pertenecen a un género, y la edad, ya que todo ser vivo nace, crece, se reproduce y muere.
Hemos definido una clase padre con una serie de atributos comunes para todas las personas que creemos.
Vamos a crear una clase, la llamamos descripción, cuando definimos métodos dentro de una clase es obligatorio usar Self.
En la siguiente línea, imprimimos lo siguiente:
Ahora mismo tanto self.genero como self.edad no tiene valores, porque aun no se los hemos pasado.
Vamos a crear una clase hija, para ello, ponemos class, nombre a dar, entre paréntesis ponemos quien es el padre, que es personas, y, dos puntos, en la siguiente línea, ponemos pass, quiere decir que no hay nada que ejecutar, pero que si ejecutamos no va a devolver error.
Creamos una variable, igualamos a la clase hija, entre paréntesis, ponemos los argumentos para los parámetros género y edad.
Si vamos al módulo descripción, ahora, self.genero vale Hembra, y, self.edad vale 20.
En la siguiente línea, ponemos:
Descripción no necesita parámetros, pulsamos F5, y, nos devuelve:
La clase hija está tomando los métodos y propiedades de la clase padre.
Vamos a crear otra clase, como sigue:
Ponemos pass.
Debajo de la línea donde hemos creado la variable mi_persona1, creamos otra variable, llamada mi_persona2, e, igualamos a persona2, y pasamos los parámetros macho y 45.
Ponemos en comentario las siguientes líneas.
Creamos una variable, usamos input, abrimos paréntesis, entre comillas dobles, ponemos, Elija sexo, hembra, macho, dos puntos, un espacio, cerramos paréntesis.
Usamos if, preguntamos que si la variable elige es igual a “M”, en ese caso, que imprima la descripción de la variable mi_persona2, en caso contrario, que imprima la descripción de la variable mi_persona1.
Pulsamos F5, escribimos un sexo, y, vemos que nos devuelve la descripción correcta.
Ahora, queremos añadir una propiedad mas a la clase persona1, para ello, podemos def, dejamos espacio, poneos dos guiones bajos, escribimos “init”, seleccionamos init, y, tabulamos.
Nos aparece:
La primera línea toma las propiedades de la clase padre, vamos a añadir un parámetro, que va a ser colorpelo.
En la línea super, dejamos los parámetros que aparecen, que son los parámetros de la clase padre, super hace una referencia a la clase padre, la clase la cual estamos heredando, al poner super, es como si estuviéramos usando el método init de propi, por eso, debe de tener los mismos parámetros que la clase padre.
Creamos una variable e igualamos al parámetro carga.
Ahora, en mi_persona1, solo pasamos el argumento para el parámetro colorpelo, lo que ocurre es que, a partir de ahora, todas las personas van a ser hembras y van a tener una edad de 25 años, cosa que no debería de ser, por lo que dejamos la primera opción.
Copiamos y pegamos el módulo descripción en la clase hija persona1, pero, modificamos el print como sigue:
En estos momentos, tenemos dos print, cuando llamamos a descripción de persona1, ejecuta el print dentro del modulo persona1, y, cuando llamamos a descripción de persona2, ejecuta el print de la clase padre.
Las clases padres no saben nada de los hijos, ellos dan a sus hijos, pero, no reciben nada de sus hijos.
Python nos permite heredar de mas de una clase, es lo que se conoce como herencia múltiple, vamos a verlo en un ejemplo más simple.
Creamos las siguientes clases padres.
Creamos una clase hija que hereda de dato1 y dato2.
La clase hija, heredan todas las clases y métodos de numero1 y numero2.
La clase dato1 tiene su constructor, pero, la clase dato2 también tiene su constructor, entonces, resultado, que constructor está heredando, hasta el momento de dato1, cuando hay herencia múltiple, siempre se le da prioridad a la primera clase que indiquemos, una clase puede heredar de más de dos clases.
En la siguiente línea, usamos init, y, ¿Qué parámetros debemos de pasar?, pues el o los parámetros de las clases padres.
En la siguiente línea, ponemos:
Quiere decir que va a tomar los parámetros de dato1, añadimos otra línea, como sigue:
Es decir, va a tomar los parámetros de ambas clases padres.
Creamos un módulo, y, añadimos las siguientes líneas:
Ahora podemos imprimir el mensaje de ambos padres.
Creamos una instancia, u, objeto, igualamos a resultado, y, pasamos los argumentos para los parámetros nombre, y, edad.
Imprimimos el modulo mostrar del objeto a1.
Nos devuelve tanto el nombre como la edad.
Pues esto es una herencia múltiple.
Miguel Angel Franco
Comments