मुझे सजावटी के साथ डॉकस्ट्रिंग का उपयोग करने में समस्या है। निम्न उदाहरण को देखते हुए:पायथन सजावट हैंडलिंग डॉकस्ट्रिंग
def decorator(f):
def _decorator():
print 'decorator active'
f()
return _decorator
@decorator
def foo():
'''the magic foo function'''
print 'this is function foo'
help(foo)
अब मदद की उम्मीद के रूप में मेरे foo
की docstring प्रदर्शित नहीं करता है, यह पता चलता है:
Help on function _decorator in module __main__:
_decorator()
डेकोरेटर के बिना, मदद सही है:
Help on function foo in module __main__:
foo()
the magic foo function
मुझे पता है कि समारोह foo
सजावट द्वारा लपेटा गया है, और इसलिए फ़ंक्शन ऑब्जेक्ट foo
फ़ंक्शन नहीं है। लेकिन उम्मीद के अनुसार डॉकस्ट्रिंग (और सहायता) प्राप्त करने का एक अच्छा समाधान क्या है?
यह काम नहीं करता है अगर 'foo' कोई तर्क लेता है - वे जो भी '_decorator' उपयोग करता है उसे बदल दिया जाता है। यह एक समस्या है, खासकर जब आप अपने सजावटी को '* args, ** kwds' लेना चाहते हैं। मैं 'functools.wraps' का उपयोग करके डॉकस्ट्रिंग को सही करने का कोई तरीका नहीं ढूंढ पाया। –
@ स्कॉट ग्रिफिथ्स: 'foo' तर्क लेने के बावजूद डॉकस्ट्रिंग अभी भी सही होगा। हालांकि, 'help (foo) '' _decorator' की पैरामीटर सूची प्रदर्शित करेगा, क्योंकि यह वास्तव में' foo' फ़ंक्शन को प्रतिस्थापित करता है। अगर आप सजावटी लिख रहे हैं तो इस बारे में कोई अच्छा तरीका नहीं है जो '* args, ** kwargs' का उपयोग करके मनमाने ढंग से तर्क लेते हैं, लेकिन मेरे लिए महत्वपूर्ण बात यह है कि डॉकस्ट्रिंग को बरकरार रखा जाता है। पैरामीटर विवरण हमेशा स्पष्टता के लिए डॉकस्ट्रिंग में निर्दिष्ट किया जा सकता है। –
अतिरिक्त जानकारी के लिए धन्यवाद। मैं हाल ही में सजाए गए कार्यों के लिए मदद विवरण को सही करने में असफल रहा हूं - यह मामलों की एक बहुत ही खराब स्थिति है, लेकिन मैं कठिनाई को समझता हूं क्योंकि सजाए गए कार्य में पूरी तरह से अलग हस्ताक्षर हो सकते हैं। फिर भी, एक रास्ता होना चाहिए ... :) –