2012-07-28 3 views
5

Je documenter le code dans Sphinx qui ressemble à ceci:Avez-sphynx remplaçons docstring texte

class ParentClass(object): 

    def __init__(self): 
     pass 

    def generic_fun(self): 
     """Call this function using /run/ParentClass/generic_fun()""" 
     do_stuff() 

class ChildClass(ParentClass): 

    def specific_fun(self): 
     """Call this function using /run/ChildClass/specific_fun()""" 
     do_other_stuff() 

J'ai ajouté le :inherited-members à la documentation ChildClass, donc j'avoir des déclarations là-dedans comme « Appelez cette fonction à l'aide/run/ParentClass/generic_fun() ".

Existe-t-il un moyen de mettre quelque chose dans les docstrings comme celui que sphinx remplacera avec la classe réelle qu'il documente?

Je voudrais avoir le look de code comme classe ParentClass (objet):

def __init__(self): 
     pass 

    def generic_fun(self): 
     """Call this function using /run/<class_name>/generic_fun()""" 
     do_stuff() 

Ainsi, dans la section ChildClass, la documentation Sphinx lirait ... en utilisant/run/ChildClass/generic_fun() ... et la section ParentClass serait ... en utilisant/run/ParentClass/generic_fun() ...?

Idéalement, j'aimerais avoir la documentation sur la même page, donc la chaîne de remplacement serait différente pour les différentes sections.

Répondre

7

J'ai trouvé une façon de le faire en regardant quelque chose d'autre.

Il existe des fonctions qu'autodoc appellera avant d'imprimer le message. J'ai ajouté ce code à mon fichier conf.py:

def get_class_name(full_module_name): 
    """ 
    Pull out the class name from the full_module_name 
    """ 
    #split the full_module_name by "."'s 
    return full_module_name.split('.')[-1] 

def process_docstring(app, what, name, obj, options, lines): 
    classname = get_class_name(name) 

    # loop through each line in the docstring and replace |class| with 
    # the classname 
    for i in xrange(len(lines)): 
     lines[i] = lines[i].replace('|class|', classname) 

def setup(app): 
    app.connect('autodoc-process-docstring', process_docstring) 

Je veux utiliser le | jeton, mais ils sont réservés aux substitutions globales. J'ai contourné cela en mettant la ligne suivante mon premier fichier (donc le code substitue | class | for | class |):

.. |class| replace:: `|class|` 
+0

Où 'get_class_name' est-il défini? – mzjn

+0

Ajouté dans le même fichier, il était juste séparé de ce bloc de code. –

Questions connexes