[PYTHON] Comment écrire un document tuple nommé en 2020

J'ai appris d'un PR que l'attribut namedtuple est automatiquement défini sur la docstring "Alias for field number xx".

$ python
Python 3.8.1 (default, Feb 13 2020, 13:34:23)
[Clang 11.0.0 (clang-1100.0.33.17)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from collections import namedtuple
>>>
>>> Coordinate = namedtuple('Coordinate', 'X Y')
>>> Coordinate.__doc__
'Coordinate(X, Y)'
>>> Coordinate.X.__doc__
'Alias for field number 0'
>>> Coordinate.Y.__doc__
'Alias for field number 1'

Si vous traitez cette classe avec Sphinx (autodoc) et générez un document, le document suivant sera généré. スクリーンショット 2020-03-15 11.40.30.png

Bien que la quantité d'informations soit faible, j'ai créé un document qui utilise du papier.

Regarder en arrière

Approche pour effacer docstring

La solution de contournement pour ce problème est le code introduit dans Suppression des docstrings namedtuple pour Sphinx. Si vous trouvez l'attribut de namedtuple, supprimez-le. En incluant cela, vous pouvez simplifier les documents redondants [^ 1].

[^ 1]: D'un autre côté, cette approche présente l'inconvénient que le mappage entre la position du nom de l'élément et le nom de l'attribut est difficile à comprendre car autodoc trie les attributs par ordre alphabétique si rien n'est spécifié. Je ne sais pas trop quoi faire du Sphinx lui-même.

Une approche pour écrire la documentation des attributs avec docstring

Aussi, dans Comment écrire une docstring pour créer un document tuple nommé avec sphinx, l'approche d'écriture du document de chaque attribut avec la docstring de la classe générée est adoptée. Introduit.

class NamedTupleWithDocstring2(namedtuple("NamedTuple", "aaa bbb ccc")):
    """
    hogehoge

    .. py:attribute:: aaa

        Description of the ``aaa``.

    .. py:attribute:: bbb

        Description of the ``bbb``.

    .. py:attribute:: ccc

        Description of the ``ccc``.
    """

Je vois, vous pouvez insérer n'importe quelle description dans ce cas.

Comment écrivez-vous maintenant?

Vous pouvez contrôler librement le document de différentes manières avec docstring, mais le code est redondant. Si vous avez Python 3.6 ou supérieur et Sphinx 2.4 disponibles, c'est un peu plus simple à écrire.

En utilisant les annotations de variables introduites dans Python 3.6, namedtuple et sa documentation peuvent être écrits comme suit:

from typing import NamedTuple

class Coordinate(NamedTuple):
    """A 2-dimension coordinate."""

    X: float  #: the coordinate on X-axis
    Y: float  #: the coordinate on Y-axis

Et si vous utilisez Sphinx 2.4, le commentaire #: attaché à cette annotation de variable sera interprété comme une docstring, donc si vous traitez le code ci-dessus avec Sphinx, il sera converti comme suit. スクリーンショット 2020-03-15 12.02.54.png

Visons le code intelligent et les documents intelligents avec de nouvelles fonctionnalités.

Recommended Posts

Comment écrire un document tuple nommé en 2020
Comment écrire une docstring pour créer un document tuple nommé avec sphinx
Comment écrire sobrement avec des pandas
Comment sortir un document au format pdf avec Sphinx
Qiita (1) Comment écrire un nom de code
Comment écrire des commentaires de document Python (Docstrings)
Comment obtenir stacktrace en python
Comment écrire ce processus en Perl?
Comment écrire Ruby to_s en Python
Comment effacer un taple dans une liste (Python)
Comment créer un fichier JSON en Python
Comment implémenter un sélecteur de dégradé dans Houdini
Comment écrire une instruction ShellScript Bash for
Comment notifier les canaux Discord en Python
Comment écrire une chaîne de caractères lorsqu'il y a plusieurs lignes en python
[Python] Comment dessiner un histogramme avec Matplotlib
Comment créer une API Rest dans Django
Comment compter les nombres dans une plage spécifique
[Go] Comment écrire ou appeler une fonction
Comment lire des fichiers dans différents répertoires
Comment se moquer d'une fonction publique dans Pytest
Comment écrire une instruction de cas bash ShellScript
Comment spécifier un schéma dans les paramètres de la base de données Django
20e Comment écrire des problèmes en temps réel hors ligne en Python
Comment convertir / restaurer une chaîne avec [] en python
Comment écrire une interface graphique à l'aide de la commande maya
Comment écrire une concaténation de chaînes sur plusieurs lignes en Python
Je veux écrire en Python! (2) Écrivons un test
[Python] Comment développer des variables dans une chaîne de caractères
Comment écrire un type liste / dictionnaire de Python3
Un mémorandum sur l'utilisation de keras.preprocessing.image de Keras
Comment afficher DataFrame sous forme de tableau dans Markdown
[Python] Comment écrire une docstring conforme à PEP8
Comment exécuter une commande à l'aide d'un sous-processus en Python
Comment référencer des fichiers statiques dans un projet Django
[Linux] Comment mettre votre IP dans une variable
XPath Basics (2) - Comment écrire XPath
Comment appeler une fonction
Comment pirater un terminal
Comment découper un bloc de plusieurs tableaux à partir d'un multiple en Python
Comment importer NoteBook en tant que module dans Jupyter (IPython)
Une histoire sur la façon de spécifier un chemin relatif en python.
Il est difficile d'écrire un algorithme très simple en php
Comment utiliser la méthode __call__ dans la classe Python
Comment importer des fichiers où vous le souhaitez en Python
[Python] Comment écrire une instruction if en une phrase.
Comment implémenter provisoirement une barre de progression dans un langage de script
Comment définir plusieurs variables dans une instruction Python for
Remarques sur la façon de charger un environnement virtuel avec PyCharm
J'ai essayé "Comment obtenir une méthode décorée en Python"
Comment développer dans un environnement virtuel Python [Memo]
Comment générer une requête à l'aide de l'opérateur IN dans Django
Comment rédiger un test de traitement utilisant BigQuery
Comment vérifier si une valeur existe dans un type d'énumération
Comment obtenir la dernière (dernière) valeur d'une liste en Python
Je n'oublierai jamais comment écrire un script shell, n'oubliez pas! !!
Comment obtenir une liste d'exceptions intégrées pour python