Tema 13. Scripts y Módulos
Explicación del uso y funcionamiento de Scripts y Módulos en Python 3.
Scripts
Script. Es un archivo que contiene líneas de código. En nuestro caso, dichas líneas estarán escritas con el lenguaje de programación Python
.
Un script de Python
tiene la extensión .py
.
Para ejecutar un script de Python
necesitamos un intérprete como bien puede ser Spyder
, Jupyter
, Google Colab
o Python
(en Linux) pero para crearlo nos basta un editor de texto.
Módulos
Módulo. Es una librería de código. Es un script que contiene un conjunto de funciones.
Un módulo de Python
, al ser un script, tiene la extensión .py
.
Para ejecutar un módulo de Python
necesitaremos seguir los mismos pasos que cuando trabajábamos con scripts
Creando un módulo
Hemos dicho que un módulo es un script que contiene funciones. Por tanto, lo primero que hacemos es crear un nuevo documento con el editor de texto al que llamaremos my_first_module.py
.
En él declararemos las siguientes funciones:
Importando un módulo
Para importar un módulo de Python dentro de un script deberemos tenerlo alojado en la misma carpeta que el script o en la ruta en la que el interprete los tenga almacenados (en mi caso es /usr/lib/python3.9/
).
Renombrando un módulo
Como recordaréis, cuando vimos por primera vez la palabra reservada import
, si lo combinábamos con la palabra reservada as
, conseguíamos renombrar el objeto que importábamos.
En este caso, my_first_module
es un nombre muy largo. Podemos renombrarlo a mfm
con la siguiente línea de código, de modo que a partir de ahora cuando queramos invocar alguna función de nuestro módulo, en vez de preceder a cada función por my_first_module
, lo haremos por mfm
Variables en un módulo
Hasta ahora solo hemos visto como acceder a funciones de un módulo, pero los módulos también pueden contener variables. Añadamos a nuestro módulo las dos siguientes líneas de código:
Si recordáis, cuando vimos la función import
, observamos que no era necesario importar todo el módulo, sino que podíamos importar funciones o incluso variables concretas del módulo con la sintaxis siguiente, y así evitar tener que indicar el nombre del módulo previo al nombre de la función o la variable en cuestión
De modo que el print
anterior queda modificado del siguiente modo
Finalmente, así como podemos modificar el nombre de los módulos, también podemos modificar el nombre tanto de las funciones como de las variables del módulo:
Módulos de Python
Python
Python
es un software libre que de por sí ya tiene muchos módulos creados que nos son de mucha utilidad:
pwn
para trabajar en la escritura de exploits.pycryptodome
para trabajar con criptografía a bajo nivel.os
para interacción entre el interprete y el sistema.socket
para trabajar con redes.
¡Y muchos más!
En secciones futuras veremos en detalle algunos de estos módulos para saber aprovecharlos al máximo.
La función dir()
dir()
La función dir()
aplicada a un script nos devuelve los métodos y las variables que contiene.
Si la aplicamos a nuestro módulo, al que recordad habíamos renombrado como mfm
, lo que obtenemos es la siguiente lista de métodos y variables.
Observación. Como resultado no solamente hemos obtenido los métodos y las variables creados por nosotros, sino que se muestran algunos atributos extras como .__file__
, que guarda el path donde está guardado el módulo, que son los que se han creado por defecto y a los cuales también podemos acceder:
EJERCICIO 1:
Vamos a crear un script llamado geometry.py
y en él vamos a crear la clase RegularPolygon
.
El constructor tomará 2 parámetros:
base
: longitud de la basen
: número de lados
El método
.__str__()
mostrará "Soy un polígono de {} lados de longitud {}".El método de instancia
.apothem()
calculará el apotema. Lo convertiremos en una propiedad.El método de instancia
.area()
calculará el área del polígono. Lo convertiremos en una propiedad.El método de instancia
.perimeter()
calculará el perímetro del polígono. Lo convertiremos en una propiedad.
EJERCICIO 2:
Vamos a crear las clases Triangle
, Square
y Pentagon
, que hereden de la clase RegularPolygon
. Solamente cambiaremos el constructor.
EJERCICIO 3:
Vamos a crear las clases Tetrahedron
y Cube
. La primera hereda de la clase Triangle
y la segunda, de la clase Square
. A ambas clases les vamos a añadir el método .volume()
, que convertiremos en ambos casos a propiedad. También tendremos que modificar ligeramente la propiedad .area
y el método .__str__()
.
EJERCICIO 4:
Vamos a crear la clase Circle
que por parámetro tome el radio r
y tenga 4 métodos: el constructor y las propiedad .diameter()
, .perimeter()
y .area()
.
Finalmente vamos a crear la clase Cylinder
que herede de Circle
y Square
. Vamos a modificar la propiedad .area()
y crear la propiedad .volume()
.
REPASO
EJERCICIO 1:Crea un script llamado vectors.py. Ábrelo y crea una clase llamada Vector2D. El constructor debe guardar las coordenadas x e y del vector.
EJERCICIO 2: Crea los siguientes métodos:
• La propiedad .module que devuelva el módulo del vector. Recuerda que el módulo de un vector 2D se calcula como p x2 + y2. Para calcular raíces cuadradas, dispones del método math.sqrt().
• El método de instancia .scalar_prod() que multiplique el vector por el número real dado por parámetro, que por defecto vale 1. Configura el método .str para que se nos muestre por pantalla el vector de la forma (x, y).
EJERCICIO 3: Crea los siguientes métodos:
• El método de clase .sum() que dados dos vectores los sume y devuelva un objeto de la clase Vector2D.
• El método de clase .subtract() que dadoas dos vectores los reste y devuelva un objeto de la clase Vector2D.
EJERCICIO 4: Crea los siguientes métodos:
• El método estático .dot_product() que dados dos vectores calcule su producto escalar. Recuerda que el producto escalar de 2 vectores 2D u y v se calcula como u · v = uxvx + uyvy
• El método de clase .distance() que dados dos vectores calcule la distancia entre ellos. Recuerda que la distancia entre 2 vectores 2D u y v se calcula como p(ux − vx)2 + (uy − vy)2
EJERCICIO 5: Ahora crea la clase Vector3D que herede de la clase Vector2D. Empieza con el constructor para que además de las coordenadas x e y, también tome la coordenada z. Recuerda que puedes utilizar el método .super() para acceder a métodos de la clase padre.
EJERCICIO 6: Crea en la clase Vector3D los métodos siguientes:
• el método .str() para que muestre el vector por pantalla de la forma (x, y, z).
• la propiedad .module. Al tener vectores 3D, el módulo se calcula como p x 2 + y 2 + z 2
• el método de instancia .scalar_prod()
• los métodos de clase .sum() y .subtract() para que devuelvan objetos de la clase Vector3D.
• el método estático .dot_product(), pues ahora el producto escalar se calcula como u · v = uxvx + uyvy + uzvz
• el método de clase .distance(), pues ahora la distancia se calcula como q (ux − vx) 2 + (uy − vy) 2 + (uz − vz) 2
Recuerda que dispones del método .super() para evitar repeticiones innecesarias de código.
EJERCICIO 7: Crea en la clase Vector3D los métodos siguientes:
• el método de clase .zero() que devuelva un objeto Vector3D con todas sus componentes 0.
• el método de clase .horizontal() que devuelva un objeto Vector3D con todas sus componentes 0 salvo la primera que valdrá 1.
• el método de clase .vertical() que devuelva un objeto Vector3D con todas sus componentes 0 salvo la segunda que valdrá 1.
• el método de clase .forward() que devuelva un objeto Vector3D con todas sus componentes 0 salvo la tercera y última que valdrá 1.
EJERCICIO 8: Crea en la clase Vector2D el método de instancia .extend_to_3D() que devuelva un objeto de la clase Vector3D siendo la componente z el valor indicado por parámetro, que por defecto valdrá 0.
EJERCICIO 9: En un notebook de Google Colab, importa el script, crea dos objetos de la clase Vector2D y prueba que todos los métodos de la clase Vector2D funcionan correctamente.
EJERCICIO 10: Ahora crea dos objetos de la clase Vector3D y prueba que todos los métodos de la clase Vector3D funcionan correctamente.
Last updated