Utilisation de javadoc pour la documentation Python [fermé]

162

Je débute actuellement avec Python et j'ai une solide expérience en PHP et en PHP j'ai pris l'habitude de l'utiliser javadoccomme modèle de documentation.

Je me demandais si javadoca sa place en tant que docstringdocumentation en Python. Quelles sont les conventions établies et / ou les guildes officielles ici?

Par exemple, est-ce que quelque chose comme ça est trop élaboré pour s'intégrer dans l'état d'esprit Python ou devrais-je essayer d'être aussi concis que possible?

"""
replaces template place holder with values

@param string timestamp     formatted date to display
@param string priority      priority number
@param string priority_name priority name
@param string message       message to display

@return string formatted string
"""

Et si je suis un peu trop exhaustif, devrais-je utiliser quelque chose comme ça à la place (où la plupart de la documentation n'est pas imprimée via la __doc__méthode)?

# replaces template place holder with values
#    
# @param string timestamp     formatted date to display
# @param string priority      priority number
# @param string priority_name priority name
# @param string message       message to display
#    
# @return string formatted string

def format(self, timestamp = '', priority = '', priority_name = '', message = ''):
    """
    replaces template place holder with values
    """
    values = {'%timestamp%' : timestamp,
              '%priorityName%' : priority_name,
              '%priority%' : priority,
              '%message%' : message}

    return self.__pattern.format(**values)
JF Dion
la source
6
Il y a aussi beaucoup plus de réponses à cela à la question précédente dont il s'agit d'un double.
Alex Dupuy
Copie
zvone

Réponses:

227

Jetez un œil au format reStructuredText (également connu sous le nom de «reST»), qui est un format de balisage en clair / docstring, et probablement le plus populaire dans le monde Python. Et vous devriez certainement regarder Sphinx , un outil pour générer de la documentation à partir de reStructuredText (utilisé par exemple pour la documentation Python elle-même). Sphinx inclut la possibilité d'extraire la documentation des docstrings dans votre code (voir sphinx.ext.autodoc ), et reconnaît les listes de champs reST suivant certaines conventions. C'est probablement devenu (ou est en train de devenir) la manière la plus populaire de le faire.

Votre exemple pourrait ressembler à ceci:

"""Replaces template placeholder with values.

:param timestamp: formatted date to display
:param priority: priority number
:param priority_name: priority name
:param message: message to display
:returns: formatted string
"""

Ou étendu avec des informations de type:

"""Replaces template placeholder with values.

:param timestamp: formatted date to display
:type timestamp: str or unicode
:param priority: priority number
:type priority: str or unicode
:param priority_name: priority name
:type priority_name: str or unicode
:param message: message to display
:type message: str or unicode
:returns: formatted string
:rtype: str or unicode
"""
Steven
la source
7
que faites-vous si vous avez besoin de couper une ligne pour une longue description? À quoi cela ressemblerait-il?
Skylar Saveland
6
Voir la référence reStructuredText, et les listes de champs en particulier: docutils.sourceforge.net/docs/ref/rst/…
Steven
6
Notez que la façon dont les phrases ici ne sont pas conformes à la PEP 257 . Il devrait être Replace template place holder with values.au lieu de replaces template place holder with values- Remarquez la phrase, la lettre majuscule au début et le point (.) À la fin.
kratenko le
1
À partir de la version 1.3, Sphinx prend également en charge un format un peu plus agréable via l' sphinx.ext.napoleonextension.
Petri du
3
Quelqu'un pourrait-il s'il vous plaît me diriger vers la meilleure documentation spécifiant ces docstrings spéciaux comme ": param ____:" et ": Returns:"? Un tel document semble assez difficile à trouver pour le moment.
krumpelstiltskin
75

Suivez le guide de style Google Python . Notez que Sphinx peut également analyser ce format en utilisant l' extension Napolean , qui sera fournie avec Sphinx 1.3 (elle est également compatible avec PEP257 ):

def func(arg1, arg2):
    """Summary line.

    Extended description of function.

    Args:
        arg1 (int): Description of arg1
        arg2 (str): Description of arg2

    Returns:
        bool: Description of return value

    """
    return True

Exemple tiré de la documentation napoléenne liée ci-dessus.

Un exemple complet sur tous les types de docstrings ici .

confus00
la source
20
pour tous les humains qui lisent des docstrings
Waylon Flinn
1
Mise à jour du lien du guide de style Google Python
confused00
@ confused00 comment puis-je documenter que ma méthode renvoie un tableau d'objets?
Cito
1
Maintenant je suis confus ! args ou params? stackoverflow.com/questions/1788923/parameter-vs-argument
shuva
25

La norme pour les chaînes de documentation python est décrite dans la proposition d'amélioration de Python 257 .

Le commentaire approprié pour votre méthode serait quelque chose comme

def format(...):
    """Return timestamp string with place holders replaced with values.

    Keyword arguments:
    timestamp     -- the format string (default '')
    priority      -- priority number (default '')
    priority_name -- priority name (default '')
    message       -- message to display (default '')
    """
srgerg
la source
17
PEP257 ne dit rien sur le formatage réel de la partie argument. Il indique simplement qu'il doit être écrit et donne un exemple. Mais ce n'est qu'un exemple. Par conséquent, je conseillerais définitivement d'utiliser la convention Sphinx, car vous ne cassez pas PEP257 et vous utilisez un formatage qui pourrait être analysé par sphinx.
vaab
7
Sauf que la première documentation présentée ci-dessus est laide et contient beaucoup d'informations redondantes pour les humains. Je préfère utiliser une convention qui rend mon code source agréable à lire sans être analysé au préalable
confused00
1

Jetez un œil à Documenting Python , une page "destinée aux auteurs et auteurs potentiels de documentation pour Python".

En bref, reStructuredText est ce qui est utilisé pour documenter Python lui-même. Le guide du développeur contient une introduction à reST, un guide de style et des conseils généraux pour rédiger une bonne documentation.

David Cain
la source