Comment documenter une constante de module en Python?

j'ai un module, errors.py dans lequel plusieurs constantes globales sont définies (note: je comprends que Python n'a pas de constantes, mais je les ai définies par convention en utilisant UPPERCASE).

"""Indicates some unknown error."""
API_ERROR = 1

"""Indicates that the request was bad in some way."""
BAD_REQUEST = 2

"""Indicates that the request is missing required parameters."""
MISSING_PARAMS = 3

en utilisant reStructuredText Comment puis-je documenter ces constantes? Comme vous pouvez le voir j'ai listé un docstring au-dessus d'eux, mais je n'ai pas trouvé de documentation qui indique de faire cela, je l'ai juste fait comme une supposition.

35
demandé sur skyler 2013-11-27 00:15:01

5 réponses

malheureusement, les variables (et les constantes) n'ont pas de docstrings. Après tout, la variable est juste un nom pour un entier, et vous ne voudriez pas attacher un docstring au nombre 1 de la façon dont vous le feriez à une fonction ou à un objet de classe.

si vous regardez presque n'importe quel module dans le stdlib, comme pickle , vous verrez que la seule documentation qu'ils utilisent est des commentaires. Et oui, cela signifie que help(pickle) montre seulement ceci:

DATA
    APPEND = b'a'
    APPENDS = b'e'
    …

... ignorant complètement les commentaires. Si vous voulez que vos docs apparaissent dans l'aide intégrée, vous devez les ajouter à docstring du module, ce qui n'est pas exactement idéal.


mais Sphinx peut faire plus que L'aide intégrée peut. Vous pouvez le configurer pour extraire les commentaires sur les constantes, ou utiliser autodata pour le faire semi-automatiquement. Par exemple:

#: Indicates some unknown error.
API_ERROR = 1

lignes multiples #: avant toute déclaration d'affectation, ou un seul #: commentaire à la droite de la déclaration, fonctionnent effectivement de la même façon que les docstrings sur les objets ramassés par autodoc. Ce qui inclut la gestion de inline rST, et l'auto-génération d'un en-tête rST pour le nom de la variable; il n'y a rien de plus que vous devez faire pour que cela fonctionne.


comme note latérale, vous pouvez envisager d'utiliser un enum au lieu de constantes séparées comme celle-ci. Si vous n'utilisez pas Python 3.4 (ce que vous n'êtes probablement pas encore...), il y a un paquet backport.enum pour 3.2+, ou flufl.enum (qui n'est pas identique, mais il est similaire, car il a été la principale source d'inspiration pour le module stdlib) pour 2.6+.

les instances Enum (pas flufl.enum , mais la version stdlib/backport) peuvent même avoir des docstrings:

class MyErrors(enum.Enum):
    """Indicates some unknown error."""
    API_ERROR = 1

    """Indicates that the request was bad in some way."""
    BAD_REQUEST = 2

    """Indicates that the request is missing required parameters."""
    MISSING_PARAMS = 3

bien qu'ils ne se présentent malheureusement pas dans help(MyErrors.MISSING_PARAMS) , ce sont des cordons que Sphinx autodoc peut détecter.

47
répondu abarnert 2013-11-26 20:36:47

vous pouvez utiliser le hash + deux points pour documenter les attributs (niveau de classe ou de module).

  #: Use this content as input for moo to do bar
  MY_CONSTANT = "foo"

Ce sera ramassé certains document de générateurs.

un exemple ici, ne pouvait pas trouver un meilleur Sphinx propriétés du module de document

16
répondu Mikko Ohtamaa 2017-05-23 12:18:12

si vous mettez une chaîne de caractères après la variable, alors sphinx la récupérera comme documentation de la variable. Je sais que ça marche parce que je le fais partout. Comme ceci:

FOO = 1
"""
Constant signifying foo.

Blah blah blah...
"""  # pylint: disable=W0105

la directive pylint dit à pylint d'éviter de signaler la documentation comme étant une déclaration sans effet.

14
répondu Louis 2013-11-26 23:57:32

il s'agit d'une question plus ancienne, mais j'ai remarqué qu'il manquait une réponse pertinente.

ou vous pouvez simplement inclure une description des constantes dans le docstring du module via .. py:données:: . De cette façon, la documentation est également disponible via l'aide interactive. Sphinx le rendra bien.

"""
Docstring for my module.

.. data:: API_ERROR

    Indicates some unknown error.

.. data:: BAD_REQUEST

    Indicates that the request was bad in some way.

.. data:: MISSING_PARAMS

    Indicates that the request is missing required parameters.
"""
13
répondu Robert Jørgensgaard Engdahl 2014-11-11 10:59:15

je pense que vous n'avez pas de chance ici.

Python ne supporte pas directement les docstrings sur les variables: il n'y a aucun attribut qui peut être attaché aux variables et récupéré de manière interactive comme l'attribut __doc__ sur les modules, les classes et les fonctions.

Source .

3
répondu Johnsyweb 2013-11-26 20:20:06