2.1 Introducción a los paquetes
Los paquetes son una forma de estructurar módulos en directorios.
Un paquete es un directorio que contiene un archivo
__init__.py
y uno o más módulos. El archivo
__init__.py
puede estar vacío o contener código
de inicialización del paquete.
Ejemplo de estructura de un paquete/directorio
mypackage/
__init__.py
module1.py
module2.py
Contenido del archivo __init__.py |
---|
|
Contenido del archivo module1.py |
---|
|
Contenido del archivo module2.py |
---|
|
Ejemplo de código que usa las funciones de este paquete:
import mypackage
print(mypackage.func1()) # Salida: Function 1
print(mypackage.func2()) # Salida: Function 2
Vamos a intentar escribir nuestro propio paquete a continuación, y a la vez entender cómo funcionan los ajenos.
2.2 Creamos nuestro paquete paso a paso
Paso 1: Creación de la estructura del paquete
El primer paso es crear la estructura de directorios y archivos para tu
paquete. Como ejemplo, vamos a crear un paquete llamado
mypackage
, que contiene dos módulos:
module1.py
y module2.py
.
Ejemplo de estructura del paquete:
mypackage/
__init__.py
module1.py
module2.py
Descripción de los archivos:
-
__init__.py
: Este archivo puede estar vacío o contener código de inicialización del paquete. Es necesario para que Python considere el directorio como un paquete. -
module1.py
ymodule2.py
: Estos archivos contienen funciones, clases y variables que quieres incluir en tu paquete.
Paso 2: Escritura del código para los módulos
Escribamos un código sencillo para nuestros módulos.
module1.py
def func1():
return "Function 1 from module1"
module2.py
def func2():
return "Function 2 from module2"
__init__.py
Para importar funciones desde nuestros módulos al nivel del paquete, las añadimos en
__init__.py
.
from .module1 import func1
from .module2 import func2
Ahora, cuando importas el paquete, las funciones func1
y func2
estarán disponibles
directamente.
Paso 3: Pruebas del paquete
Crea un archivo test.py
en el mismo directorio donde se encuentra el directorio mypackage
, y
usa el paquete en este archivo para las pruebas.
test.py
import mypackage
print(mypackage.func1()) # Salida: Function 1 from module1
print(mypackage.func2()) # Salida: Function 2 from module2
Ejecuta test.py
para asegurarte de que tu paquete funciona correctamente.
2.3 Uso de la función dir()
Cuando importas un módulo o paquete, puedes usar
la función dir()
para obtener una lista de todos los
atributos y métodos disponibles en ese módulo. Esto es especialmente útil si
estás trabajando con un módulo nuevo o desconocido y quieres rápidamente saber qué
funciones y clases proporciona.
Ejemplo: Exploración del módulo estándar math
Veamos un ejemplo de uso de dir()
para explorar
el módulo estándar math
.
import math
print(dir(math))
Este código importa el módulo math
y muestra una lista de todos los atributos y
métodos disponibles. El resultado se verá algo así:
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan',
'atan2', 'atanh', 'ceil', 'comb', 'copysign', 'cos', 'cosh', 'degrees', 'dist', 'e', 'erf', 'erfc', 'exp', 'expm1',
'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf',
'isnan', 'isqrt', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'perm', 'pi', 'pow', 'prod',
'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']
Esta lista incluye todas las funciones y constantes definidas
en el módulo math
, como sin
, cos
, tan
, pi
y otras.
Uso de dir()
para módulos personalizados
También puedes usar dir()
para
módulos personalizados (los tuyos). Supongamos que tienes un archivo mymodule.py
con
el siguiente contenido:
# mymodule.py
def greet(name):
return f"Hello, {name}!"
pi = 3.14159
Puedes importar este módulo y usar dir()
para explorar
su contenido:
import mymodule
print(dir(mymodule))
El resultado será el siguiente:
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__',
'greet', 'pi']
La lista incluye 8 atributos internos (subrayados) del módulo
mymodule
, y al final están tu método greet
y variable pi
.
GO TO FULL VERSION