2009-07-19 1 views
18

Я использую Sphinx для документирования моего проекта python. У меня включено расширение autodoc и в моих документах есть следующее.Как использовать Sphinx 'Autodoc-extension для частных методов?

.. autoclass:: ClassName 
    :members: 

Проблема заключается в том, что она только документирует non-private methods в классе. Как включить частные методы?

+2

Sphinx недавно добавила функцию для этого: https://bitbucket.org/birkenfeld/sphinx/issue/176/обеспечить-option-to-include-private-и –

+0

@KevinHorn Было бы неплохо, если бы у * sphinx-apidoc * было это также – mlt

ответ

4

Вы пытались использовать custom method для определения того, должен ли член быть включен в документацию, используя autodoc-skip-member?

-7

Вот подсказка: представьте, что частное означает «секрет».

Вот почему Сфинкс не будет документировать их.

Если вы не имеете в виду «секрет», подумайте об изменении их имен. Избегайте использования имени однодискового подчеркивания в целом; это не поможет, если у вас нет причин держать эту секрецию в секрете.

+1

Это кажется обратным, о чем говорит PEP-8 о приватном. «Если есть сомнения, выберите непубличный» http://www.python.org/dev/peps/pep-0008/ – svrist

+0

@svrist: Не назад - это точная точка. Sphinx не будет документировать непубличные. Если вы выберете непубличную, вы не получите автоматическую документацию. Если вам нужна документация, с другой стороны, не выбирайте непубличную. Здесь «сомнение» означает, что у вас есть веская причина для обоих и не может решить. Если у вас нет * хорошей * причины для непубличных, у вас также нет «сомнений». Сделайте его общедоступным, если у вас нет * хорошей * причины для непубличных. –

+0

Но что, если вы используете Sphinx для * внутренней * документации? –

2

Нет, частные средства являются закрытыми для класса и не должны использоваться из общедоступного API. Это не означает секрет, и для тех из нас, кто хочет использовать сфинкс для полной документации классов, исключая частные методы, это довольно раздражает.

Предыдущий ответ верен. Вам придется использовать настраиваемый метод, поскольку Sphinx в настоящее время не поддерживает autodoc в сочетании с частными методами.

8

Один из способов обойти это - принудительно заставить Сфинкса документировать частные члены. Вы можете сделать это путем добавления automethod к концу Docs уровня класса:

class SmokeMonster(object): 
    """ 
    A large smoke monster that protects the island. 
    """ 
    def __init__(self,speed): 
     """ 
     :param speed: Velocity in MPH of the smoke monster 
     :type speed: int 

     .. document private functions 
     .. automethod:: _evaporate 
     """ 
     self.speed = speed 

    def _evaporate(self): 
     """ 
     Removes the smoke monster from reality. Not to be called by client. 
     """ 
     pass 
+0

Точно! Большое спасибо за это: o) –

+0

Просто имейте в виду, что '.. private private' и' .. automethod :: _FUNC_NAME' должны быть размещены там, где вы хотите, чтобы выход находился. Они не должны находиться в функции '__init __()' связанного класса – dtlussier

+0

Спасибо, также работал на уровне модуля для частной функции модуля: IE '.. autofunction :: _my_private_module_function' в модуле docstring и в моем' .rst' файле. К сожалению ': private-members:' не работал для я думаю, что он работает только с классами. –

19

, если вы используете сфинкс 1.1 или выше, с документацией сайта сфинкса на http://sphinx.pocoo.org/ext/autodoc.html,

:special-members: 
:private-members: 
+4

Обратите внимание, что вы можете сделать это по умолчанию для всех классов, используя ['autodoc_default_flags'] (http://sphinx.pocoo.org/ext/autodoc.html# confval-autodo c_default_flags). –

3

Глядя на apidoc code , мы можем изменить то, что сфинкс-apidoc генерировать установки переменной окружения:

export SPHINX_APIDOC_OPTIONS='members,special-members,private-members,undoc-members,show-inheritance' 

Вы также можете добавить эту установку в ваш Makefile (если ваш пакет использует один):

docs: 
    rm -rf docs/api 
    SPHINX_APIDOC_OPTIONS='members,special-members,private-members,undoc-members,show-inheritance' sphinx-apidoc -o docs/api/ intellprice 
    $(MAKE) -C docs clean 
    $(MAKE) -C docs html 
1

Вы можете добавить это conf.py файл:

autodoc_default_flags = ['members', 'undoc-members', 'private-members', 'special-members', 'inherited-members', 'show-inheritance']