La última lección cubriremos el tema asesino de las Clases. Como recuerdas, las clases son combinaciones de variables y funciones en un pawuete agradable y ordenado. Dentro de la jerga de la programación a esta característica se le llama encapsulación, pero independientemente de cómo se llame, es una característica genial para mantener las cosas juntas para que el código se pueda utilizar en muchos lugares. Por supuesto debes preguntarte ¿Cómo llevo mis clases a muchos lugares, em nuchos programas? La respuesta es ponerlos en un módulo para importarlos a otros programas.
Un módulo es un archivo Python que (generalmente) tiene una única definición de variables, funciones y clases. Por ejemplo, un módulo podría lucir como esto, el cual almacenamos en un archivo moduletest.py
:
### EXAMPLE PYTHON MODULE
# Definición de algunas variables:
numberone = 1
ageofqueen = 78
# definición de una función
def printhello():
print("hello")
def timesfour(input):
print(eval(input) * 4)
# definición de una clase
class Piano:
def __init__(self):
self.type = input("What type of piano? ")
self.height = input("What height (in feet)? ")
self.price = input("How much did it cost? ")
self.age = input("How old is it (in years)? ")
def printdetails(self):
print("This piano is a/an " + self.height + " foot", end=" ")
print(self.type, "piano, " + self.age, "years old and costing\
" + self.price + " dollars.")
Como puedes ver, un módulo luce como un programa Python normal. Entonces ¿Qué hacemos con un módulo? Importamos un fragmento (o todo) a otros programas.
Esto asume que el módulo se encuentra en el mismo directorio como mainprogram.py
, o es un módulo por default que viene con Python. Omites la extensión de .py
al final del nombre del archivo - es ignorado. Normalmente colocas las sentencias import
al principio del archivo Python, pero tecnicamente en cualquier lugar. Para utilizar los elementos del módulo en su programa principal, utilice los siguiente:
### USING AN IMPORTED MODULE
# Use the form modulename.itemname
# Examples:
print(moduletest.ageofqueen)
cfcpiano = moduletest.Piano()
cfcpiano.printdetails()
Como observas, el modulo que importas actúan de manera parecida a las clases que vimos en la última lección; cualquier cosa dentro ellos debe estar prececida por un nombre de módulo modulename.
para que funcione.
Te gustaría poder deshacerte de la parte de modulename.
que tienes que poner antes de cada elemento que utilizas para el módulo? No? Nunca? Bien, te lo enseñare de todos modos.
Una forma de evitar esta molestia es importar sólo los objetos deseados desde el módulo. Para ello utiliza el operador from
, utilizalo de la forma de from modulename import itemname
. Aquí un ejemplo:
### IMPORTA ELEMENTOS DIRECTAMENTE DENTRO DE TU PROGRAMA
# import them
from moduletest import ageofqueen
from moduletest import printhello
# now try using them
print(ageofqueen)
printhello()
¿Para que sirve esto? Bueno, tal vez podría utilizarse para hacer su código un poco más legible. Si nos metemos dentro de montones de módulos dentro de módulos, también se podría eliminar esa capa extra de mimetismo críptico.
Si quisieras, podrías importar todo desde un módulo, de esta forma utilizando from modulename import *
. Por supuesto, esto puede ser problematico si hay objetos en tu programa con el mismo nombre que algunos elementos del módulo. Con módulos grandes, puede suceder fácilmente,y puede causar dolores de cabeza. Una mejor manera de hacer esto sería importar el módulo de la manera normal (sin el operador from) y luego asignar los elementos a un nombre local:
### ASIGNAR ELEMENTOS A UN NOMBRE LOCAL
# Assigning to a local name
timesfour = moduletest.timesfour
# Using the local name
print(timesfour(565))
De esta manera, puedes borrar algunas características del mimetismo críptico, y tener todos los elementos desde un cierto módulo.
La última forma práctica para importar los módulos es con un alias. Podrías cambiar un nombre porque has utilizado el mismo nombre para tu programa, otro módulo que importaste utiliza el mismo nombre, o podrías abreviar un nombre más largo que usas mucho. Entonces podemos utilizar el operador as
. Que luce como esto:
### IMPORTA UN MODULO CON UN ALIAS
# import module
import moduletest as mt
# use module
print(mt.age)
cfcpiano = mt.Piano()
cfcpiano.printdetails()
¡Es todo! es una lección muy simple, pero puedes organizar tus programas de forma muy ordenada. De hecho, ahora es increiblemente fácil hacer programas que pueden crecer en complejidad sin terminar con un archivo críptico y lleno de bugs.
Los módulos son geniales para importar código. En la próxima lección, aprenderemos sobre el archivo de entrada y salida, y guardar información dentro de las clases, para ser recuperada en forma posterior. ¡Será genial!