2016-01-18 12 views
7

La documentazione Sfinge a http://www.sphinx-doc.org/en/stable/domains.html#cross-referencing-python-objects dice,Qual è la differenza di comportamento tra: func: e: meth: ruoli in Python Sphinx?

: py: func: Riferimento una funzione Python; possono essere usati nomi puntati. Il testo del ruolo non deve includere parentesi finali per migliorare la leggibilità; verranno aggiunti automaticamente da Sphinx se il valore di configurazione add_function_parentheses è True (valore predefinito).

: py: meth: Riferimento di un metodo di un oggetto. Il testo del ruolo può includere il nome del tipo e il nome del metodo; se si verifica all'interno della descrizione di un tipo, il nome del tipo può essere omesso. È possibile utilizzare un nome punteggiato.

Ma non ho trovato alcuna differenza nel modo in cui si comportano.

Ecco il mio modulo Python per il quale ho generato documentazione.

"""foo module.""" 

def hello(name): 
    """Print hello addressed to *name*. 

    Args: 
     name (str): Name to address. 
    """ 
    print('hello', name) 

class Foo: 

    """Foo class.""" 

    def bye(self, name): 
     """Print bye addressed to *name*. 

     Args: 
      name (str): Name to address. 
     """ 
     print('bye', name) 

if __name__ == '__main__': 
    hello('world') 
    Foo().bye('python') 

Questo è quello che ho nel mio file index.rst.

Foo Documentation 
================= 

See :func:`foo.hello` and :func:`foo.Foo.bye`. 

Also, see :meth:`foo.hello` and :meth:`foo.Foo.bye`. 

foo module 
========== 
.. automodule:: foo 
    :members: 

Dopo aver eseguito uno make html, questo è l'output che vedo.

Screeshot of foo documentation

Entrambi i ruoli :func: e :meth: hanno generato validi collegamenti con riferimenti incrociati a hello e Foo.bye indipendentemente dal fatto che il bersaglio è una funzione o un metodo.

Qual è la differenza tra i ruoli :func: e :meth:. Puoi fornire un esempio per il quale si comportano diversamente?

risposta

8

Ho visto il codice Sfinge. L'unica differenza che sono riuscito a distinguere è che ognuno dei ruoli genera elementi HTML il cui HTML class include il nome del ruolo che lo ha creato. Per esempio, l'elemento code per un ruolo :func: sarà simile a questa:

<code class="xref py py-func docutils literal"> 

considerando che, per un ruolo :meth:, sarebbe py-meth invece di py-func. Lo stile CSS predefinito incluso in Sphinx non distingue tra py-meth e py-func ma sarebbe possibile avere un foglio di stile che li stili in modo diverso.

Per i calci, ho provato altri ruoli (ad esempio class) e li ho fatti puntare a metodi sugli oggetti. Sfinge non ha avuto problemi anche se non aveva senso.

0

È l'informazione semantica che viene utilizzata nell'indice generato ad esempio per etichettare qualcosa come funzione o metodo. Come già detto da Luigi, sarebbe possibile modellarli in modo diverso in HTML tramite CSS.