Estoy usando sphinx y el complemento autodoc para generar documentación API para mis módulos de Python. Si bien puedo ver cómo documentar bien parámetros específicos, no puedo encontrar un ejemplo de cómo documentar un **kwargs
parámetro.
¿Alguien tiene un buen ejemplo de una forma clara de documentarlos?
Respuestas:
Creo que
subprocess
-module's docs es un buen ejemplo. Proporcione una lista exhaustiva de todos los parámetros para una clase principal / principal . Luego, consulte esa lista para todas las demás apariciones de**kwargs
.fuente
subprocess.call(*popenargs, **kwargs)
. Está documentado comosubprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False)
donde todo después de*
son las claves reconocidas en**kwargs
(O al menos las que se usan con frecuencia)subprocess.Popen
y ya no estoy seguro de que sea un ejemplo particularmente bueno.Después de encontrar esta pregunta, me decidí por lo siguiente, que es Sphinx válido y funciona bastante bien:
Se
r"""..."""
requiere para hacer de esto una cadena de documentos "sin procesar" y así mantener la\*
intacta (para que Sphinx lo tome como un literal*
y no como el comienzo del "énfasis").El formato elegido (lista con viñetas con tipo entre paréntesis y descripción separada por m-guiones) es simplemente para coincidir con el formato automático proporcionado por Sphinx.
Una vez que haya realizado este esfuerzo de hacer que la sección "Argumentos de palabras clave" se vea como la sección "Parámetros" predeterminada, parece que podría ser más fácil implementar su propia sección de parámetros desde el principio (según algunas de las otras respuestas) , pero como prueba de concepto, esta es una forma de lograr una apariencia agradable para los complementarios
**kwargs
si ya está usando Sphinx.fuente
Cadenas de documentos de Google Style analizadas por Sphinx
Descargo de responsabilidad: no probado.
A partir de este recorte del ejemplo de la cadena de documentación de la esfinge ,
*args
y**kwargs
se dejan sin expandir :Me gustaría sugerir la siguiente solución de compacidad:
Observe cómo
Optional
no se requiere para los**key
argumentos.De lo contrario , puede intentar enumerar explícitamente los * args debajo
Other Parameters
y**kwargs
debajo deKeyword Args
(consulte las secciones analizadas ):fuente
Hay un ejemplo de doctstring para Sphinx en su documentación. Concretamente muestran lo siguiente:
Aunque preguntaste sobre esfingeexplícitamente, también señalaría la Guía de estilo de Google Python . Su ejemplo de cadena de documentos parece implicar que no llaman específicamente a los kwargs. (other_silly_variable = Ninguno)
ABB tiene una pregunta sobre la respuesta aceptada de hacer referencia a la documentación de gestión de subprocesos. Si importa un módulo, puede ver rápidamente las cadenas de documentos del módulo a través de inspect.getsource.
Un ejemplo del intérprete de Python que utiliza la recomendación de Silent Ghost:
Por supuesto, también puede ver la documentación del módulo a través de la función de ayuda. Por ejemplo ayuda (subproceso)
Personalmente, no soy un fanático de la cadena de documentos de subproceso para kwargs como ejemplo, pero al igual que el ejemplo de Google, no enumera los kwargs por separado, como se muestra en el ejemplo de documentación de Sphinx.
Incluyo esta respuesta a la pregunta de ABB porque vale la pena señalar que puede revisar la fuente o la documentación de cualquier módulo de esta manera para obtener información e inspiración para comentar su código.
fuente
other_silly_variable
no es un argumento de kwargs, sino uno completamente normal.Si alguien más está buscando una sintaxis válida ... Aquí hay una cadena de documentos de ejemplo. Así es como lo hice, espero que te sea útil, pero no puedo afirmar que cumpla con nada en particular.
fuente
Esto depende del estilo de documentación que use, pero si está usando el estilo numpydoc , se recomienda documentar
**kwargs
usandoOther Parameters
.Por ejemplo, siguiendo el ejemplo de quornian:
Tenga en cuenta especialmente que se recomienda dar los valores predeterminados de kwargs, ya que estos no son obvios a partir de la firma de la función.
fuente
Si está buscando cómo hacer esto en estilo numpydoc , simplemente puede mencionarlo
**kwargs
en la sección Parámetros sin especificar el tipo , como se demuestra en el ejemplo de numpydoc de la extensión de esfinge napolean y la guía de cadena de documentos de la documentación de pandas sprint 2018.Aquí hay un ejemplo que encontré en la guía para desarrolladores de LSST que explica muy bien cuál debería ser la descripción del
**kwargs
parámetro:Alternativamente, basándose en lo que sugirió @Jonas Adler, creo que es mejor poner
**kwargs
y su descripción en laOther Parameters
sección ; incluso este ejemplo de la guía de documentación de matplotlib sugiere lo mismo.fuente