Fundamentos de POO para interfaces gráficas en Python

Extendiendo métodos

En la lección anterior vimos que es posible llamar manualmente un método de una superclase, pero esa no es su única utilidad, también se utiliza para extender un método sin perder la funcionalidad de la clase heredada:

herencia_multiple.py

class A():
    def hola(self):
        print("Hola heredado de la clase A")


class B(A):

    def hola(self):
        print("Hola de la propia clase B")
        A.hola(self)  # <-- aquí la magia


b = B()
b.hola()

Python 3 provee un nivel de abstracción para no tener que hacer referencia explícitamente al nombre de la superclase usando la función super() para substituir la superclase inmediata:

def hola(self):
    print("Hola de la propia clase B")
    super().hola()

Esto también se puede escribir con la sintaxis que indica explícitamente buscar la superclase de B, que es A, de la siguiente manera:

def hola(self):
    print("Hola de la propia clase B")
    super(B, self).hola()

La primera forma es más simple pero en mucha documentación lo veréis escrito de la segunda, así que tenedlo en cuenta.

Con todo lo que hemos visto ya deberíais tener una base suficiente sobre la programación orientada a objetos. No os preocupéis si algún concepto no os ha quedado del todo claro, cuando los veáis en la práctica os iréis familiarizando con ellos y siempre estáis a tiempo de volver a estos apuntes si necesitáis refrescar la memoria.

Y ahora sí, ha llegado el momento de empezar con lo bueno.