14 votes

Sphinx autodoc show-inheritance : Comment sauter les bases intermédiaires non documentées ?

J'ai une structure de classe à trois niveaux comme ceci :

class Super(object):
    """This class is documented."""

class Intermediate(Super):
    pass

class Sub(Intermediate):
    """This is also documented."""

Mon index.rst se présente comme suit :

.. automodule:: mymodule
   :show-inheritance:
   :inherited-members:

Sphinx génère une belle documentation API pour moi. Elle inclut les classes Super y Sub avec les commentaires appropriés. Il ne comprend pas Intermediate parce qu'il n'y a pas de commentaire et que je n'ai pas fourni le nom de l'utilisateur. undoc-members drapeau. C'est parce que je ne veux pas Intermediate pour apparaître dans la documentation.

Mon problème est le suivant : Parce que je fournis le show-inheritance Sphinx affiche les bases de chaque classe ; object pour Super y Intermediate pour Sub . Puisque Intermediate est non documenté, je ne veux pas qu'il apparaisse dans la liste des classes de base. A la place, j'aimerais que Sphinx affiche la classe documentée suivante dans l'arbre d'héritage, Super . En d'autres termes : Je veux que Sphinx affiche Super pas Intermediate comme classe de base de Sub .

Quelqu'un sait-il comment faire ?

3voto

Laurent LAPORTE Points 10193

Pour cette situation particulière, où vous voulez "cacher" l'héritage de la classe, vous pouvez utiliser la méthode suivante autoclass pour documenter chaque classe visible au lieu de documenter l'ensemble du module.

Par exemple :

.. currentmodule:: demo

.. autoclass:: Super
   :members:

.. autoclass:: Sub
   :members:

Ensuite, vous pouvez ajouter le :show-inheritance: pour montrer l'héritage à la classe que vous voulez.

Je cite le docteur :

Les directives automodule, autoclass et autoexception supportent également une option drapeau appelée show-inheritance. Lorsqu'elle est donnée, une liste de classes de base sera insérée juste en dessous de la signature de la classe (lorsqu'elle est utilisée avec automodule, elle sera insérée pour chaque classe qui est documentée dans le module).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X