Показаны только частные методы с Sphinx Autodoc

Здесь есть несколько вопросов о показе закрытых методов с помощью Autodoc, но я ничего не видел о показе только закрытых методов.

Приватные методы и обычные методы могут быть показаны следующим образом:

.. autoclass:: my_package.my_file.MyClass
   :members:
   :private-members:

Однако удаление :members: приводит к тому, что ни один из методов не отображается.

Как я могу показать только частные методы и только для этой одной директивы?


person snazzybouche    schedule 22.08.2019    source источник


Ответы (1)


Нашел способ!

Подробное описание настройки пропуска участников здесь я смог определить правило выборочного пропуска участников.

В conf.py:

def hide_non_private(app, what, name, obj, skip, options):
    # if private-members is set, show only private members
    if 'private-members' in options and not name.startswith('_'):
        # skip public methods
        return True
    else:
        # do not modify skip - private methods will be shown
        return None

def setup(app):
    app.connect('autodoc-skip-member', hide_non_private)

Всякий раз, когда autodoc должен решить, включать ли элемент в документацию (что он и делает всякий раз, когда предмет директивы содержит этот член), вызывается эта функция. Функция возвращает логическое значение, указывающее, следует ли пропустить этот член. Если True, он не отображается. Если False, то да. Если None, то результат этой функции игнорируется и вызывается следующий метод проверки пропуска.

Если директива содержит параметр :private-members: и имя члена не начинается с _ (т. е. это общедоступный метод), он пропускается и не будет отображаться в документации.

Итак, когда я создаю документацию, используя:

.. autoclass:: my_package.my_file.MyClass
   :members:
   :private-members:

Публичные методы не показаны, а приватные — есть.

Однако мне все еще нужно установить :members:, иначе эта проверка даже не произойдет. Если я найду где-нибудь, где мне действительно нужно перечислить как общедоступные, так и частные методы, мне нужно будет найти более сложную проверку.

person snazzybouche    schedule 22.08.2019