Au cours des dernières années, j'ai écrit plusieurs variantes de autodoc-skip-member
pour divers projets Python sans rapport, car je voulais des méthodes comme __init__()
, __enter__()
et __exit__()
pour apparaître dans ma documentation API (après tout, ces "méthodes spéciales" font partie de l'API et quel meilleur endroit pour les documenter que dans la docstring de la méthode spéciale).
Récemment, j'ai pris la meilleure implémentation et l'ai intégrée à l'un de mes projets Python ( voici la documentation ). La mise en œuvre se résume à ça :
import types
def setup(app):
"""Enable Sphinx customizations."""
enable_special_methods(app)
def enable_special_methods(app):
"""
Enable documenting "special methods" using the autodoc_ extension.
:param app: The Sphinx application object.
This function connects the :func:`special_methods_callback()` function to
``autodoc-skip-member`` events.
.. _autodoc: http://www.sphinx-doc.org/en/stable/ext/autodoc.html
"""
app.connect('autodoc-skip-member', special_methods_callback)
def special_methods_callback(app, what, name, obj, skip, options):
"""
Enable documenting "special methods" using the autodoc_ extension.
Refer to :func:`enable_special_methods()` to enable the use of this
function (you probably don't want to call
:func:`special_methods_callback()` directly).
This function implements a callback for ``autodoc-skip-member`` events to
include documented "special methods" (method names with two leading and two
trailing underscores) in your documentation. The result is similar to the
use of the ``special-members`` flag with one big difference: Special
methods are included but other types of members are ignored. This means
that attributes like ``__weakref__`` will always be ignored (this was my
main annoyance with the ``special-members`` flag).
The parameters expected by this function are those defined for Sphinx event
callback functions (i.e. I'm not going to document them here :-).
"""
if getattr(obj, '__doc__', None) and isinstance(obj, (types.FunctionType, types.MethodType)):
return False
else:
return skip
Oui, il y a plus de documentation que de logique :-). L'avantage de définir un autodoc-skip-member
comme ceci par rapport à l'utilisation de la fonction special-members
option (pour moi) est que le special-members
permet également de documenter des propriétés telles que __weakref__
(disponible sur toutes les classes du nouveau style, AFAIK) que je considère comme du bruit et pas du tout utile. L'approche callback évite cela (car elle ne fonctionne que sur les fonctions/méthodes et ignore les autres attributs).
1 votes
Non, ce n'est pas ce qu'écrit la documentation, du moins à ce jour :
"both" Both the class’ and the __init__ method’s docstring are concatenated and inserted.
-> Par conséquent, il ne faut pas que ce soit seulement le__init__(self)
mais aussi la docstring de la classe si vous l'avez. Pouvez-vous fournir un cas de test car si c'est le cas, cela ressemble à un bug, non ?