2009-11-27 9 views
9

मुझे क्लास विधियों में डॉकस्ट्रिंग के साथ एक पायथन मॉड्यूल मिला है, और मॉड्यूल डॉकस्ट्रिंग में वास्तविक दुनिया का उदाहरण है। भेद यह है कि विधि-डॉकस्ट्रिंग को पूरी तरह से दोहराने योग्य परीक्षणों के लिए सावधानीपूर्वक तैयार किया गया है, जबकि असली दुनिया का उदाहरण सिर्फ लिनक्स खोल से इतिहास की एक प्रतिलिपि है - जो कि अजगर दुभाषिया का आह्वान करने के लिए हुआ था।पायथन सिद्धांत: पूरे ब्लॉक को छोड़ दें?

उदा।

""" 
Real-world example: 

# python2.5 
Python 2.5 (release25-maint, Jul 20 2008, 20:47:25) 
[GCC 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> from packagename import module 
>>> module.show_real_world_usage() 
'Hello world!' 
""" 

class SomeClass(object): 
    def someMethod(self): 
     """ 
     >>> 1 == 1 
     True 
     """ 

मैं SomeClass.someMethod में doctest चलाना चाहते हैं, लेकिन मॉड्यूल के docstrings में नहीं।

डॉक्टरेट +SKIP निर्देश केवल प्रति पंक्ति काम करता है, जिसका अर्थ है कि मेरे असली दुनिया के उदाहरण में 10 लाइनों को जोड़ना। बदसूरत!

क्या एक संपूर्ण ब्लॉक को सबसे अच्छा छोड़ने का कोई तरीका है? एचटीएमएल में <!-- ... --> की तरह थोड़ा?

+0

मैं सहमत हूँ। यह एक सुविधा है जो बहुत उपयोगी होगी। –

उत्तर

6

मेरा समाधान 3-वर्ण >>> और ... नेताओं को ट्रिम करने के लिए किया गया है जहां मैं उन पर छोड़ने के लिए सबसे अच्छा चाहता हूं, उन्हें 2-वर्ण बनाते हैं।

तो

""" 
>>> from packagename import module 
>>> module.show_real_world_usage() 
'Hello world!' 
""" 

""" 
>> from packagename import module 
>> module.show_real_world_usage() 
'Hello world!' 
""" 

Epydoc के रूप में अच्छी तरह से के रूप में यह doctests करता है यह प्रदर्शित नहीं करता है बन गया है, लेकिन मैं इस के साथ रह सकते हैं। हालांकि डॉक्टरेट में एक छोड़-आगे-आगे-सूचना निर्देश स्वागत किया जाएगा।

1

यदि यह किसी भी माध्यम से वास्तविक कार्य नहीं है, तो आप केवल एक चर को मान असाइन कर सकते हैं। उदाहरण के लिए,

example_usage = """ 
Real-world example: 

# python2.5 
... 
""" 

उस "परीक्षण" का मूल्यांकन नहीं किया जाएगा।

__example_usage__ (या डबल-अंडरस्कोर से घिरा हुआ कुछ और) का उपयोग करना बेहतर हो सकता है ताकि यह स्पष्ट हो कि यह "जादू" चर है और स्क्रिप्ट के संदर्भ में उपयोग करने के लिए एक चर नहीं है।

+1

साफ, लेकिन फिर यह मदद() और epydoc मदद करने के लिए भी अदृश्य है। – RobM

+0

मुझे 'help() 'के बारे में निश्चित नहीं है, लेकिन आप केवल epydoc में एक नया फ़ील्ड जोड़ सकते हैं: http://epydoc.sourceforge.net/epydoc.html#adding-new-fields –

9

लपेटें एक समारोह में उदाहरण और फिर छोड़ समारोह कॉल:

""" 
>>> def example(): 
>>> from packagename import module 
>>> module.show_real_world_usage() 
>>> example() # doctest: +SKIP 
'Hello world!' 
""" 
+0

मुझे लगता है कि आप एक गायब हैं कॉलन, मुझे लगता है कि यह '# डिक्टेस्ट: + स्किप 'होना चाहिए, यह मेरे बिना काम नहीं करेगा बल्कि अच्छा काम करेगा, धन्यवाद –

+0

@IdaN Yup। निर्देशों को एक कोलन की आवश्यकता होती है। धन्यवाद: http://docs.python.org/2/library/doctest.html#directives – lambacck

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