Herencia¶
Clases padre e hija¶
Una clase se puede copiar de otra:
| Clases5.py | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | |
Lo que muestra:
Creando Poly
Contenido de Poly:
- despedirse
- nombre
- saludar
- volar
Poly está volando
Poly dice hola
Poly dice adios
Poly es suprimido
En este ejemplo:
-
creamos una clase
Avecon un métodovolar()y una propiedadnombre. -
creamos una clase
Loroderivada deAveclass Loro (Ave): método añadidos por la clase Loro -
todos los loros son aves, y la clase
Lorohereda las características de la claseAve, añadiendo las suyas propias. -
A la clase original se le llama clase padre
- La clase derivada se llama clase hija
Si la clase hija define un método con el mismo nombre que otro de la clase padre, lo sustituye:
| Clases6.py | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | |
Muestra:
Loro Poly está volando
Piolin está volando
Hemos redefinido el método __init__() de la clase Loro para que el nombre de
los objetos de esta clase incluya el nombre de la misma.
Llamada a métodos de la clase padre¶
Si reescribimos un método en la clase hija, a veces es necesario dejar las sentencias comunes en la clase padre y añadir en la hija las sentencias especializadas. En este caso, hay que acordarse de invocar desde la clase hija el método original:
| Clases6.py | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | |
Muestra:
Loro Poly está volando
Piolin está volando
En el método de la clase padre definimos la propiedad nombre. El método de la clase hija llama al de la clase padre y, una vez creada la propiedad, le añade el prefijo "Loro".
La llamada a la clase padre se hace creando una instancia anónima:
super().__init__(nombre)
La palabra super hace referencia a la clase padre.