Pregunta

¿Cuáles son buenas maneras de tratar con contenido repetitivo en las cadenas de documentación? Tengo muchas funciones que toman argumentos 'estándar', que tienen que ser explicado en la cadena de documentación, pero sería bueno para escribir las partes pertinentes de la cadena de documentación sólo una vez, ya que esto sería mucho más fácil de mantener y actualizar. Ingenuamente intentado lo siguiente:

arg_a = "a: a very common argument"

def test(a):
    '''
    Arguments:
    %s
    ''' % arg_a
    pass

Pero esto no funciona, porque cuando lo hago help(test) no veo la cadena de documentación. ¿Hay una buena manera de hacer esto?

¿Fue útil?

Solución

Como dicen las otras respuestas, es necesario cambiar el miembro __doc__ del objeto función. Una buena manera de hacer esto es utilizar un decorador que llevará a cabo el formato de la cadena de documentación:

def fixdocstring(func):
    func.__doc__ = func.__doc__.replace('<arg_a>', 'a: a very common argument')
    #(This is just an example, other string formatting methods can be used as well.)
    return func

@fixdocstring
def test(a):
    '''
    Arguments:
    <arg_a>
    ''''
    pass

Otros consejos

__doc__ es asignable en la mayoría de los tipos definidos por el usuario:

arg_a = "a: a very common argument"

def test(a):
    pass

test.__doc__ = '''
    Arguments:
    %s
    ''' % arg_a

No hay manera obvia de hacerlo por lo que yo sé (al menos no sin la reasignación explícitamente __doc__ como sugiere Ignacio).

Pero creo que esto sería una cosa terrible a hacer. Considere lo siguiente:

¿Qué pasa si estoy navegando a través de su código y la lectura de esta cadena de documentación en el 300-ésima línea de su archivo? ¿De verdad quieres que vaya buscar para el argumento?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top