2009-07-19 13 views
18

Używam Sphinx do dokumentowania mojego projektu Pythona. Mam włączone rozszerzenie autodoc i mam w moich dokumentach następujące elementy.Jak mogę używać rozszerzenia Autodoc Sphinx do prywatnych metod?

.. autoclass:: ClassName 
    :members: 

Problem polega tylko na tym, że dokumentuje tylko klasę non-private methods. Jak również uwzględnić prywatne metody?

+2

Sphinx niedawno dodaliśmy funkcję dla tego: https://bitbucket.org/birkenfeld/sphinx/issue/176/dostarczenie-opcja-to-to-private-a –

+0

@KevinHorn byłoby miło, gdyby * sfinks-apidoc * miał równie dobrze – mlt

Odpowiedz

4

Czy próbowałeś użyć custom method do określenia, czy członek powinien zostać włączony do dokumentacji, używając autodoc-skip-member?

-7

Oto podpowiedź: wyobraź sobie, że prywatne oznacza "tajne".

Dlatego Sphinx ich nie udokumentuje.

Jeśli nie masz na myśli "tajemnicy", rozważ zmianę ich nazw. Unikaj używania nazwy pojedynczego znaku wiodącego podkreślenia w ogóle; to nie pomaga, chyba że masz powód, aby utrzymywać implementację w tajemnicy.

+1

wydaje do tyłu co PEP-8 mówi o prywatnym. "Jeśli masz wątpliwości, wybierz opcję niepubliczną" http://www.python.org/dev/peps/pep-0008/ – svrist

+0

@svrist: Not back - to dokładny punkt. Sphinx nie będzie dokumentował danych niepublicznych. Jeśli wybierzesz opcję niepubliczną, nie otrzymasz automatycznej dokumentacji. Z drugiej strony, jeśli chcesz mieć dokumentację, nie wybieraj opcji niepublicznych. Tutaj "wątpliwość" oznacza, że ​​masz dobry powód dla obu i nie możesz się zdecydować. Jeśli nie masz * dobrego * powodu niepublicznego, nie masz też "wątpliwości". Udostępnij go publicznie, chyba że masz * dobry * powód niepubliczny. –

+0

Ale co, jeśli używasz Sphinx do * wewnętrznej * dokumentacji? –

2

Nie, prywatnych środków prywatnych do klasy i że nie powinien być stosowany z publicznych API. Nie oznacza to tajemnicy i dla tych z nas, którzy chcą używać sfinksa do pełnej dokumentacji zajęć, z wyłączeniem metod prywatnych jest dość denerwujące.

Poprzednia odpowiedź jest prawidłowa. Będziesz musiał użyć niestandardowej metody, ponieważ Sphinx nie obsługuje obecnie autodoc w połączeniu z prywatnymi metodami.

8

Jednym ze sposobów, aby ominąć ten jest jawnie wymusić Sphinx udokumentować członków prywatnych. Można to zrobić poprzez dołączenie automethod do końca docs poziomie klasy:

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

Dokładnie! Wielkie dzięki za to: o) –

+0

Just miej na uwadze, że '.. document private functions' oraz' ..autometod :: _FUNC_NAME' powinny być umieszczone w dowolnym miejscu, w którym mają być umieszczone dane wyjściowe.Nie muszą one być w funkcji '__init __()' odpowiedniej klasy – dtlussier

+0

dziękuję! Działało również na poziomie modułu dla funkcji modułu prywatnego: IE '.. autofunction :: _my_private_module_function' w module docstring iw pliku' .rst'. Niestety ': private-members:' nie działało dla funkcje prywatne na poziomie modułu.Myślę, że działa tylko na klasach. –

19

jeśli używasz sfinks 1.1 lub wyżej, od strony dokumentacji Sfinks w http://sphinx.pocoo.org/ext/autodoc.html,

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

Zauważ, że możesz uczynić to domyślnym dla wszystkich klas za pomocą ['autodoc_default_flags'] (http://sphinx.pocoo.org/ext/autodoc.html# confval-autodo c_default_flags) ustawienie. –

3

Patrząc na apidoc code , możemy zmienić to, co sfinks-apidoc generuje ustawienie zmiennej środowiskowej:

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

Możesz również dodać tę konfigurację do pliku Makefile (i f pakiet korzysta jeden):

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

Można dodać do tego pliku: conf.py

autodoc_default_flags = ['members', 'undoc-members', 'private-members', 'special-members', 'inherited-members', 'show-inheritance'] 
Powiązane problemy