2012-12-09 8 views
6

Powiedzmy mam klasy jak poniżej:Jak przesłonić parametry konstruktorów w Sphinx przy pomocy autodoc?

class MyClass(object): 
    """ Summary docs for my class. 

    Extended documentation for my class. 
    """ 

    def __init__(self, *args): 
     self.values = np.asarray(args) 

Jeśli używam Sfinks z rozszerzeniem autodoc udokumentowanie tej klasy tak:

.. automodule:: mymodule 
    :members: 

... podpis konstruktora pojawia się jako MyClass(*args). Wolałbym to zastąpić i udokumentować jako, powiedzmy, .

Gdyby to była funkcja, mógłbym zastąpić podpis w pierwszym wierszu docstrukcji. Ale ta sztuczka nie działa na klamrę klasową. W jaki więc sposób mogę przesłonić sygnaturę konstruktora?

+0

Ukrywanie prawdziwego podpisu od użytkowników wydaje mi się złym pomysłem. –

+1

@LevLevitsky - konstruktor jest zawsze wywoływany z pewną liczbą argumentów. Niezależnie od tego, czy jest to "* args", czy "arg1, arg2, ...", jest to szczegół implementacji i może się zmienić w dowolnym momencie. Nie ma "prawdziwego" sygnatury połączenia - użytkownik powinien przekazać to, co jest udokumentowane jako dopuszczalne parametry. – detly

+0

Istnieje różnica w zachowaniu (na przykład w przypadku nadmiernych argumentów). –

Odpowiedz

9

Myślę, że najlepszym rozwiązaniem dla ciebie jest zrobić coś takiego:

.. automodule:: mymodule 
    :members: 
    :exclude-members: MyClass 

    .. autoclass:: MyClass(first, second, third) 

MyClass będzie miał params nadpisane i innych członków mymodule będzie autodocumented. Musisz wykluczyć MyClass używając :exclude-members:, ponieważ będzie on dołączony dwa razy. Myślę, że to najprostsze rozwiązanie w tej chwili.

+1

Używam techniki '..autodule :: mymodule \ n: members:'. – detly

+0

Zaktualizowałem moją odpowiedź. – prmtl

+0

Wreszcie można to wypróbować i działa idealnie. – detly

Powiązane problemy