Herencia
La herencia es una técnica de la Programación Orientada a Objetos en la que una clase (conocida como clase hija o subclase) hereda todos los métodos y propiedades de otra clase (conocida como padre o clase base).
La sintaxis para definir una clase que herede de otra es la siguiente:
class ClaseBase:
# código de la clase base
class Subclase(BaseClass):
# código de la subclase
La subclase puede añadir funcionalidades. Esta técnica permite reutilizar código.
class Dispositivo:
def __init__(self,identificador,marca):
self.identificador = identificador
self.marca = marca
def conectar(self):
print("¡Conectado!")
# la clase base se indica entre paréntesis
class Teclado(Dispositivo):
def __init__(self,identificador,marca,tipo):
# llamada al constructor del padre
super().__init__(identificador,marca)
self.tipo = tipo
# metodo de la subclase
def pulsar_tecla(self,tecla):
print(tecla)
t1 = Teclado("0001", "Logitech", "AZERTY")
print(f"Id: {t1.identificador}, Marca: {t1.marca}, tipo: {t1.tipo}")
t1.conectar()
t1.pulsar_tecla("a")
En el ejemplo anterior aparece la llamada al método super()
. Este método devuelve una instancia (temporal) de la clase padre de la que estamos heredando de forma que podamos llamar a todos sus métodos. De esta forma podemos evitar duplicar código.
Herencia múltiple
Python soporta la herencia múltiple, es decir, heredad métodos y atributos de más de un padre. En caso de heredar atributos o métodos con el mismo nombre, Python dará prioridad al posicionado más a la izquierda en la declaración.
# en caso de conflicto Dispositivo tendrá prioridad sobre Periférico
class Teclado(Dispositivo, Periférico):
# cuerpo de la clase
Coding time!
Ejercicio 1
Continuando con el Ejercicio 1 del tema anterior, crea una clase Vehículo
y otra llamada Bicicleta
. La clase Vehículo será el padré de Coche
y Bicicleta
y contendrá las propiedades y/o métodos comunes de ambos. La bicicleta no tendrá gasolina ni repostará, pero cada 50 kilometros necesitará invocar al método hinchar_ruedas()
o no podrá continuar.
Puedes utilizar este código para comprobar que todo funciona correctamente:
# Coche:
coche = Coche("1122PKL","Audi")
coche.repostar(20)
coche.avanzar(120)
print(f"Total de kms coche: {coche.kilometros}. Gasolina: {coche.gasolina}")
coche.avanzar(40)
print(f"Total de kms coche: {coche.kilometros}. Gasolina: {coche.gasolina}")
# Bicicleta
bicicleta = Bicicleta("BH")
bicicleta.avanzar(30)
print(f"Total de kms bici: {bicicleta.kilometros}")
bicicleta.avanzar(25)
print(f"Total de kms bici: {bicicleta.kilometros}")
bicicleta.hinchar_ruedas()
bicicleta.avanzar(25)
print(f"Total de kms bici: {bicicleta.kilometros}")
Resultado:
Total de kms coche: 120. Gasolina: 8.0
Total de kms coche: 160. Gasolina: 4.0
Total de kms bici: 30
Es necesario hinchar para recorrer la cantidad indicada de kms.
Total de kms bici: 30
Total de kms bici: 55
Ejercicio 2
Continuando con el Ejercicio 4 del tema anterior, crea una clase Poligono
y otra llamada Cuadrado
. La clase Poligono
será el padre de Triangulo
y Cuadrado
, y contendrá las propiedades y métodos comunes de ambos. Ambos tendrán también otra propiedad llamada color
.
t1 = Triangulo("rojo",[2, 5, 2])
print(f" Es un {t1.forma()} {t1.color} con {t1.perimetro()}m de perímetro.")
c1 = Cuadrado("azul",[4, 4, 4, 4])
print(f" Cuadrado {c1.color} con {c1.perimetro()}m de perímetro.")
Resultado:
Es un Triángulo isósceles rojo con 9m de perímetro.
Cuadrado azul con 16m de perímetro.