SOBRESCRITURA DE MÉTODOS

CARRETERA HACIA LA CUMBRE, PARQUE NACIONAL DE LAS CAÑADAS DEL TEIDE, TENERIFE.

 

      Veamos el siguiente ejemplo:


Debemos recordar que a través de las herencias podemos añadir posteriormente diversas funciones a clases que ya tengamos modelizadas en nuestro código.

A modo de ejemplo vamos a implementar (instanciar) un nuevo método nos permita rastrear posibles coincidencias entre nombres. Para hacerlo correctamente debemos modelizar una clase nueva que nos permita iniciar el rastreo al que nos referimos sin depender de ninguna otra clase.

Recordemos que las listas en Python, como las tuplas, los diccionarios, etc. son clases en sí mismas, predefinidas y directamente invocables.

Como consecuencia de la adición a nuestro código de este nuevo script tendremos que modificar nuestra clase Cartera_de_Empresa(), de tal modo que nuestra variable de clase original, contactos = [], se transforma en una instancia de la clase nueva que vamos a modelizar a continuación y que llevará el nombre (classname) de Coincidencias().

Esto es, la antigua lista contactos se convierte en un objeto (instancia) instanciado a partir de la clase Coincidencias(), de tal modo que la antigua variable de clase  contactos se transformará ahora en una instancia de la clase Coincidencias(), que heredará o extenderá de la superclase o clase padre list y que pasaremos en su zona de herencias.

A fin de cuentas, [ ] es también, a parte de una envoltura específica de las listas como ( ) lo es para las tuplas y { } para los diccionarios,  una contracción simbólica de la propia clase list():


En la captura que sigue probamos nuestro código:


Obviamente, como la variable de clase contactos va a convertirse en nuestro código renovado en una instancia de la clase Coincidencias(), que vamos a invocar dentro del cuerpo o ámbito de nuestra clase Cartera_de_Empresa(), tendremos que modelizar la clase Coincidencias() primero y, a continuación, la clase Cartera_de_Empresa().

En lugar de list podemos usar también tuple, por ejemplo, pasando igualmente tuple en la zona de herencias de Coincidencias() como superclase  o clase padre y sustituyendo los corchetes, [ ], por paréntesis, ( ). Pero, ojo, 👀, las tuplas no se pueden modificar, por lo que no podríamos añadir o suprimir ítems, elementos, de la colección de objetos (nombres): es más, contactos podría ser una colección vacía y, por tanto, inoperante.

Cuestión a parte son los diccionarios, dict, que sí gozan de mayor flexibilidad pero que, como no puede ser menos, quedan supeditados a su particular sintaxis de pares clave (key)/valor (value). Veamos un ejemplo:




SOBRESCRITURA Y SUPER()



      Python cuenta con herramientas propias para optimizar y extender aún más el recurso más importante y definitorio de la Programación Orientada a Objetos: las herencias. Y una de éstas es la sobrescritura, que nos permite incorporar un método desde la superclase o clase padre a una clase hija y, aún, modificarlo o alterarlo en ésta última si nos pareciera pertinente. Para ello es requisito indispensable que ambos métodos compartan el mismo nombre. Así, Python llamará de acuerdo al flujo de ejecución, al método de la subclase o clase hija en lugar de a su homónimo en la superclase o clase padre, cuando dicho flujo de ejecución alcance en su descenso a la clase hija.


Sin embargo, la aplicación del procedimiento de sobrescritura en nuestros códigos no está exenta de inconvenientes. El más evidente es el de incurrir en la duplicación de código, acto "desdichado" como pocos que se opone frontalmente al paradigma de la POO sobre la reusabilidad del código. Por otra parte, ciertas incompatibilidades entre los códigos de la clase padre y la clase hija que habrán de solventarse como Dios buenamente nos de a entender, con los ajustes y las modificaciones oportunas, lo que entra en el ámbito de la optimización del código, aunque afortunadamente, suelen solventarse con sencillez en la mayoría de las ocasiones.

Pues bien, los "flecos" de la sobrescritura se "recortan" con la función super() (v. LA FUNCIÓN SUPER()) que, básicamente y aplicado al método como ya hemos visto, nos lo devuelve como si el mencionado método fuera una instancia más de la superclase o clase padre.


CALETAS DE AGUAS TURQUESA EN LA COSTA NORTE DE TENERIFE.


No hay comentarios:

Publicar un comentario