Organizando tus módulos de Python - __init__.py

by Pablo Estrada

Python es un lenguaje súper fácil de usar. Se ha vuelto muy popular en escuelas, investigación, y para “Data Science”. Éste es un post sobre ‘buenas prácticas’ con tu códgo de Python.

¿Para qué es __init__.py?

El archivo __init__.py es utilizado para inicializar paquetes de Python. Imaginemos que tenemos un paquete de python llamado package, que además contiene un subpaquete llamado subpackage. Imaginemos que se ve así:

package/
    __init__.py
    archivo1.py
    archivo2.py
    archivo3.py
    subpackage/
        __init__.py
        submodulo.py

En este caso, el archivo init.py le indica al intérprete de Python que el directorio package contiene un módulo, y que debe tratarlo como tal (es decir, hacer que sea posible importar los archivos como parte del módulo).

¿Qué pongo en el archivo __init__.py?

En general no es necesario poner nada en el archivo __init__.py, pero es muy común usarlo para realizar configuraciones e importar cualquier objeto necesario de nuestra librería.

Por ejemplo, en nuestro ejemplo, si el archivo archivo1.py contiene una clase llamada Archivo, podemos importarla con __init__.py para que esté disponible al nivel de paquete. Normalmente para importar esta clase, tendríamos que hacer lo siguiente:

from package.archivo1 import Archivo

Pero podemos simplificarlo con nuestro __init__.py así:

# En el archivo package/__init__.py
from archivo1 import Archivo

# En tu programa que utiliza el paquete package
from package import Archivo

Otra posibilidad bastanté útil de __init__.py es la variable __all__. Esta variable contiene la lista de módulos que serán importados al utilizar import *. Para nuestra estructura de ejemplo, si el __init__.py del directorio subpackage/ contiene lo siguiente:

__all__ = ['elmodulo1','elmodulo2']

Entonces al realizar lo siguiente:

from subpackage import *
# Importa elmodulo1 y elmodulo2

Con estas herramientas puedes hacer que tus paquetes sean mucho más elegantes de importar y manejar. Ojalá haya resultado útil, y cualquier duda o comentario, adelante!

Posteriormente habrá otros posts sobre cómo usar Python mejor.

Written on May 3, 2016