2009-10-05 7 views
8

J'ai essayé de procéder comme suit:manipulation de chaînes en Python docstrings

#[...] 
    def __history_dependent_simulate(self, node, iterations=1, 
            *args, **kwargs): 
     """ 
     For history-dependent simulations only: 
     """ + self.simulate.__doc___ 

Ce que j'ai essayé d'accomplir ici est d'avoir la même documentation pour cette méthode privée que la documentation de la méthode simulate, à l'exception avec une courte introduction. Cela me permettrait d'éviter le copier-coller, garder un fichier plus court et ne pas avoir à mettre à jour la documentation pour deux fonctions à chaque fois.

Mais cela ne fonctionne pas. Est-ce que quelqu'un sait pourquoi, ou s'il y a une solution?

Répondre

9

Une meilleure solution est probablement d'utiliser un décorateur, par exemple:

def add_docs_for(other_func): 
    def dec(func): 
     func.__doc__ = other_func.__doc__ + "\n\n" + func.__doc__ 
     return func 
    return dec 

def foo(): 
    """documentation for foo""" 
    pass 

@add_docs_for(foo) 
def bar(): 
    """additional notes for bar""" 
    pass 

help(bar) # --> "documentation for foo // additional notes for bar" 

De cette façon, vous pouvez faire des manipulations arbitraires de docstrings.

+0

Une manipulation arbitraire signifie que vous pourriez avoir "VOIR DOCS FOR> foo <" dans la docstring, et demander au décorateur de le remplacer par foo .__ doc__, par exemple. –

1

Je pense que this section fait assez clair:

Qu'est-ce qu'un docstring?

A docstring est une chaîne de caractères qui se produit que la première instruction dans un module , la fonction, une classe ou méthode définition. Une telle docstring devient l'attribut doc spécial de cet objet .

Donc, ce n'est pas une expression qui dans une chaîne, il est une chaîne littérale .

Questions connexes