Herencia Python 3 POO

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.

Compartir

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *