Saltar a contenido

Docstrings

En Python todos los objetos cuentan con una variable especial llamada doc gracias a la que podemos describir para qué sirven los y cómo se usan los objetos. Estas variables reciben el nombre de docstrings, cadenas de documentación.

Funciones

Python implementa un sistema muy sencillo para establecer el valor de las docstrings, únicamente tenemos que crear un comentario en la primera línea después de la declaración.

def hola(arg):
    """Este es el docstring de la función"""
    print("Hola", arg, "!")

hola("Héctor")
Hola Héctor !

Para consultar la documentación es tan sencillo como utilizar la función reservada help y pasarle el objeto:

help(hola)
Help on function hola in module __main__:

hola(arg)
    Este es el docstring de la función

Clases y métodos

De la misma forma podemos establecer la documentación de la clase después de la definición, y de los métodos, como si fueran funciones:

class Clase:
    """ Este es el docstring de la clase"""
    def __init__(self):
        """Este es el docstring del inicializador de clase"""
    def metodo(self):
        """Este es el docstring del metodo de clase"""

o = Clase()
help(o)
Help on Clase in module __main__ object:

class Clase(builtins.object)
 |  Este es el docstring de la clase
 |  
 |  Methods defined here:
 |  
 |  __init__(self)
 |      Este es el docstring del inicializador de clase
 |  
 |  metodo(self)
 |      Este es el docstring del metodo de clase

Scripts y módulos

Cuando tenemos un script o módulo, la primera línea del mismo hará referencia al docstring del módulo, en él deberíamos explicar el funcionamiento del mismo:

"""Este es el docstring del módulo"""
def despedir():
    """Este es el docstring de la función despedir"""
    print("Adiós! Me despido desde la función despedir() del módulo prueba")
def saludar():
    """Este es el docstring de la función saludar"""
    print("Hola! Te saludo desde la función saludar() del módulo prueba")
import mi_modulo

help(mi_modulo)
Help on module mi_modulo:

NAME
    mi_modulo - Este es el docstring del módulo
FUNCTIONS
    despedir()
        Este es el docstring de la función despedir
    saludar()
        Este es el docstring de la función saludar
help(mi_modulo.despedir)
Help on function despedir in module mi_modulo:

despedir()
    Este es el docstring de la función despedir

Como dato curioso, también podemos listar las variables y funciones del módulo con dir():

dir(mi_modulo)
['__builtins__',
 '__cached__',
 '__doc__',
 '__file__',
 '__loader__',
 '__name__',
 '__package__',
 '__spec__',
 'despedir',
 'saludar']

Como vemos muchas de ellas son especiales, seguro que muchas os suenan, os invito a comprobar sus valores:

print(mi_modulo.__name__)     # Nombre del módulo
print(mi_modulo.__doc__)      # Docstring del módulo
print(mi_modulo.__package__)  # Nombre del paquete del módulo
'mi_modulo'
Este es el docstring del módulo

Paquetes

En el caso de los paquetes el docstring debemos establecerlo en la primera línea del inicializador:

__init__.py

"""Este es el docstring de mi_paquete"""
import mi_paquete

help(mi_paquete)
Help on package mi_paquete:

NAME
    mi_paquete - Este es el docstring de mi_paquete
PACKAGE CONTENTS
    adios (package)
    hola (package)

Ejemplos

Podéis aprender a crear buena documentación tomando como referencia contenido de las librerías internas de Python:

help(print)
Help on built-in function print in module builtins:

print(...)
    print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
    Prints the values to a stream, or to sys.stdout by default.
    Optional keyword arguments:
    file:  a file-like object (stream); defaults to the current sys.stdout.
    sep:   string inserted between values, default a space.
    end:   string appended after the last value, default a newline.
    flush: whether to forcibly flush the stream.
help(len)
Help on built-in function len in module builtins:

len(obj, /)
    Return the number of items in a container.
help(str)
Help on class str in module builtins:

class str(object)
 |  str(object='') -> str
 |  str(bytes_or_buffer[, encoding[, errors]]) -> str
import datetime

help(datetime)
Help on module datetime:

NAME
    datetime - Fast implementation of the datetime type.
CLASSES
    builtins.object
        date
            datetime

Recordad, una buena documentación siempre dará respuesta a las dos preguntas:

  • ¿Para qué sirve?
  • ¿Cómo se utiliza?

Última edición: 6 de Octubre de 2018