2009-10-05 39 views
8

私は次の操作を実行しようとしてきた:文字列操作

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

私はここで達成しようとしたこと以外、方法simulateの文書として、このプライベートメソッドの同じドキュメントを持つことです短い紹介と一緒に。これにより、コピー・ペーストを避け、ファイルを短くし、毎回2つの関数のドキュメントを更新する必要がなくなります。

しかし、動作しません。なぜ誰かが理由を知っていますか、それとも解決策があるのでしょうか?

答えて

9

よりよい解決策は、例えば、デコレータを使用することが考えられます:

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" 

あなたはドキュメンテーション文字列の任意の操作を行うことができますこの方法。

+0

任意の操作とは、ドキュメントストリング内で "ドキュメントを参照する> foo <"を持つことができ、デコレータがそれをfoo .__ doc__と置き換えることを意味します。 –

1

私はthis sectionはそれはかなり明らかに思う:

docstringとは何ですか?

ドキュメント文字列は はモジュール、関数、クラス、またはメソッド 定義の最初の文のように発生すること文字列リテラルです。このようなドキュメントストリングは、 ドキュメントという特殊属性の オブジェクトになります。

だから、それは文字列リテラルだ、文字列に評価される式ではありません。