Para recuperar terreno y derrotar estas desventajas, Python nos permite desarrollar en otros lenguajes como C la escritura de pequeñas piezas que podemos utilizar para sobreponernos a los cuellos de botella de rendimiento.
Jython y IronPython
Estas dos implementaciones nos permiten acceder de forma muy sencilla a módulos de JAVA para Jython o de C# en .NET Para IronPython, esto hace que sencillamente implementemos los módulos y las clases que necesitemos y como por arte de magia pasen a formar parte de nuestro software sin mayores traumas.
Veamos un ejemplo para Jython, en el siguiente código escribiremos una clase en JAVA:
public class JythonTest { public void greeting() { System.out.println("Hello, world!"); } }
Podemos ver en el ejemplo que no es más que una simple clase con un método void que nos retorna una impresión de un mensaje, en este caso el icónico Hello, world!, ahora en la siguiente imagen veremos cómo podemos hacer el llamado a este código desde nuestra consola de Python con Jython:
Observamos en este caso que la importación se hizo como si otro módulo de Python se tratase, esto nos da una gran ventaja, imaginemos que todos los métodos que necesitamos ya están hechos, sería un desperdicio de tiempo volver a hacerlos solo para cumplir con la estructura de Python, sin embargo al poder importarlos de esta forma ya nos habremos ahorrado unas cuantas horas de trabajo y sufrimiento.
Cuando trabajamos con IronPython sucede algo similar al momento de importar un código hecho en C#, veamos el siguiente ejemplo en código:
using System; namespace FePyTest { public class IronPythonTest { public void greeting() { Console.WriteLine("Hello, world!"); } } }
Como vemos es sencillamente el mismo ejemplo anterior solo que esta vez seguimos las directrices de C#, una de las partes más características es el uso de un namespace, veamos en la siguiente imagen como nos quedaría el ejemplo al llamar este método desde la consola de Python:
Acá vemos como llamamos a nuestro módulo sys, lo que nos permite cargar el archivo C# compilado en una librería DLL, luego importamos el namespace de la clase, instanciamos la misma y al final hacemos el llamado al método.
Con esto vimos cómo lograr extender Python, donde no solo dependemos de su simpleza a la hora de desarrollar, sino que también apelamos a su inteligencia al permitirnos tomar la fortaleza de otros lenguajes de forma que podemos cubrir sus debilidades y ampliar de manera extensa los límites de su funcionalidad y versatilidad.