2012-07-28 11 views
5

मैं स्फिंक्स में कोड का दस्तावेजीकरण कर रहा हूँ जैसा दिखता है कि इस docstring जगह है:स्फिंक्स पाठ

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() 

मैं ChildClass प्रलेखन के लिए :inherited-members जोड़ा, तो मैं वहाँ की तरह में बयान है "/ ParentClass का उपयोग कर/चलाने इस समारोह कॉल/generic_fun() "।

क्या कोई तरीका है कि मैं डॉकस्ट्रिंग में कुछ डाल सकता हूं जैसे कि स्फिंक्स उस वास्तविक वर्ग के साथ प्रतिस्थापित करेगा जो इसे दस्तावेज कर रहा है?

मैं वर्ग ParentClass (वस्तु) की तरह कोड देखने के लिए करना चाहते हैं:

def __init__(self): 
     pass 

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

तो ChildClass अनुभाग में, स्फिंक्स प्रलेखन पढ़ें ... का उपयोग कर/चलाने/ChildClass/generic_fun() ... और ParentClass अनुभाग पढ़ा जाएगा .../run/parentClass/generic_fun() ... का उपयोग कर?

आदर्श रूप में मैं एक ही पृष्ठ पर प्रलेखन करना चाहता हूं, इसलिए प्रतिस्थापन स्ट्रिंग विभिन्न वर्गों के लिए अलग होगी।

उत्तर

7

मुझे कुछ और देखने के दौरान ऐसा करने का एक तरीका पता चला।

संदेश प्रिंट करने से पहले ऑटोडोक कॉल कॉल करेंगे। मैंने इस कोड को मेरी 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) 

मैं इसका उपयोग करना चाहता हूं | टोकन, लेकिन वे वैश्विक प्रतिस्थापन के लिए आरक्षित हैं।

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

'get_class_name' कहाँ परिभाषित किया गया है: (| वर्ग | के लिए | | वर्ग तो कोड के विकल्प) मैं निम्न पंक्ति मेरी पहला फ़ाइल डाल कर कि चारों ओर है? – mzjn

+0

इसे जोड़ा गया। वही फ़ाइल, यह सिर्फ कोड के इस ब्लॉक से अलग थी। –

संबंधित मुद्दे