Search code examples
pythonpython-sphinxsphinx-napoleon

sphinx autodoc-skip-member handler: can't show __init__() when using napoleon


I want to include the docstrings for __init__() in my sphinx-generated documentation.

I was following the accepted answer to this stackoverflow question to add a handler for autodoc-skip-member and was still unable to see my __init__() documentation. Trace code inside the if name == "__init__": block shows I am hitting that code.

On a hunch I removed 'sphinx.ext.napoleon' from my extensions definition, leaving

extensions = [
    'sphinx.ext.autodoc',
    # 'sphinx.ext.napoleon',
]

and then I can see the __init__() documentation.

The only thing I see in the napoleon documentation that seems relevant is napoleon_include_special_with_doc, which it says defaults to True. Explicitly setting it to True in conf.py doesn't seem to change anything.

ETA: If I add the following method:

def __blah__(self):
    '''blah blah blah'''
    print self.__class__

I see __blah__() in my generated documentation.

  • If I change the name of __blah__ to __repr__ or __str__, I see them in the generated documentation.
  • If I comment out the existing __init__ and change __blah__ to __init__ I don't see it.

So it seems specific to __init__().

Is this a known issue, and is there another way to control this when using napoleon?


Solution

  • Per Rob's followon at https://github.com/sphinx-doc/sphinx/issues/2374, if you're using any extension that also sets a handler for the "autodoc-skip-member" event only one of the handlers will be used. This would seem to be the issue at hand. Thanks Rob!