2012-08-22 13 views
8

ho un modulo che va qualcosa come questo:override dichiarazione di funzione in autodoc per sfinge

#!/usr/bin/env python 

#: Documentation here. 
#: blah blah blah 
foobar = r'Some really long regex here.' 

def myfunc(val=foobar): 
    '''Blah blah blah''' 
    pass 

... e ho un file di .rst che va qualcosa come questo:

:mod:`my_module` Module 
----------------------- 

..automodule:: my_module 
    :members: 
    :private-members: 
    :show-inheritance: 

Quando Costruisco la documentazione, ottengo un file html con uno snippet simile a questo:

mymodule.foobar. foobar = 'Alcuni assurdamente lungo e brutto regex qui'

documentazione extra qui

mymodule. myfunc (val = 'Alcuni assurdamente lungo e brutto regex qui')

bla bla bla

Sulla base di questo stackoverflow post, ho pensato che avrei potuto cambiare alterando il mio modulo a:

#!/usr/bin/env python 

#: .. data:: my_module.foobar 
#: Extra documentation here 
foobar = 'Some really long regex here.' 

def myfunc(val=foobar): 
    '''.. function:: my_module.myfunc(val=foobar) 

    Blah blah blah''' 
    pass 

... ma che non ha fatto il trucco, e proprio allegato la firma ho voluto sotto il brutto uno come parte del corpo. Qualcuno sa come posso ignorare correttamente questo?

(sto usando Sfinge v1.1.3, btw.)

risposta

10

si dispone di una variabile a livello di modulo che viene utilizzato come valore di default di un argomento parola chiave in una funzione. Sfinge visualizza il valore (anziché il nome) di quella variabile nella firma della funzione. Questo problema è discusso in another question e l'OP ha anche inviato an issue ticket a GitHub a riguardo.

Tuttavia, è possibile ovviare a questo in due modi:

  1. Override la firma nel file .rst utilizzando autofunction, come spiegato nel the answer alla domanda collegata.

  2. Se la prima riga del docstring si presenta come una firma e se la variabile di configurazione autodoc_docstring_signature è impostato su True (che lo è di default), quindi Sfinge userà quella linea, come la firma.

    Quindi, se si dispone di una docstring che appare come segue,

    def myfunc(val=foobar): 
        '''myfunc(val=foobar) 
    
        Blah blah blah''' 
        pass 
    

    dovrebbe funzionare nel modo desiderato.

    Nella domanda, avete questa prima linea nella docstring:

    .. function:: my_module.myfunc(val=foobar) 
    

    Questo non funziona perché non sembra una firma corretta.

+0

Si può fare questo per le classi (in particolare, i loro costruttori)? – detly

+0

È bello, ho aperto completamente una [nuova domanda a riguardo] (http://stackoverflow.com/questions/13786030/how-do-i-override-constructor-parameters-in-sphinx-with-autodoc). – detly

+0

Sostituire la firma nella prima riga della stringa doc è davvero utile, grazie per il suggerimento! – brianmearns

Problemi correlati