Hola a todos, hoy os voy a enseñar como usar la herencia en Python 3.
La herencia consiste en la creación de clases a partir de otras ya existentes. Tenemos lo que llamamos una clase padre (superclase) y clases hijas (clases derivadas), que heredan los métodos y atributos de su clase padre.
Vamos a ver un ejemplo, tenemos una clase empleado que sera una superclase y las clases hijas.
La idea es que los empleados sean del tipo que sean tienen atributos o métodos comunes y para optimizar las clases creamos una clase padre que contenga todo lo común a todas las hijas y en las hijas, ademas de los atributos del padre pueden tener sus propios atributos o métodos.
Una buena forma de ver la herencia, es con la frase “es un”. Por ejemplo, una Moto“es un” Vehiculo.
Antes de empezar con la clase hija, voy a recordar la clase padre Vehiculo:
class Vehiculo: def __init__(self, matricula, marca, modelo): self.__matricula = matricula self.__marca = marca self.__modelo = modelo @property def matricula(self): return self.__matricula @matricula.setter def matricula(self, value): self.__matricula = value @property def marca(self): return self.__marca @marca.setter def marca(self, value): self.__marca = value @property def modelo(self): return self.__modelo @modelo.setter def modelo(self, value): self.__modelo = value def arrancar(self): print("Arrancando el vehiculo...")
Ahora vamos a crear una clase hija Moto, una moto tiene todo lo que tiene un vehículo mas si tiene o no sidecar (por ejemplo).
class Moto(Vehiculo): def __init__(self, matricula, marca, modelo, sidecar): super().__init__(matricula, marca, modelo) self.sidecar = sidecar @property def sidecar(self): return self.__sidecar @sidecar.setter def sidecar(self, value): self.__sidecar = value
Como veis, solo hay que poner entre paréntesis la clase padre al crear la clase hija. También es importante ver que al crear una moto, debo darle la matricula, marca y modelo porque realmente estoy creando un vehiculo.
Aquí usamos una nueva palabra, super, esto hace referencia a la clase padre que seria Vehiculo.
Vamos a probar la clase.
m = Moto("1111AAAA", "VESPA ", "125N", True) print("") print("Moto") print(m.matricula) print(m.marca) print(m.modelo) print(m.sidecar)
Este es el resultado:
Recordar que todos los métodos del padre se heredan a las hijas, en este caso, todos los get y set y el método arrancar.
Si lo llamo, ¿Que me mostrara? Lo mismo que el padre, entonces ¿puedo personalizarlo en Moto? La respuesta es si. Esto en POO se llama sobrescribir un método.
Vemos como se hace en la clase hija:
class Moto(Vehiculo): def __init__(self, matricula, marca, modelo, sidecar): super().__init__(matricula, marca, modelo) self.__sidecar = sidecar @property def sidecar(self): return self.__sidecar @sidecar.setter def sidecar(self, value): self.__sidecar = value def arrancar(self): print("Arrancando la moto...")
Si lo ejecutamos lo siguiente:
m = Moto("1111AAAA", "VESPA ", "125N", True) print("") print("Moto") print(m.matricula) print(m.marca) print(m.modelo) print(m.sidecar) m.arrancar()
Este es el resultado:
Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.
Deja una respuesta