2009-11-24 12 views
10

मेरे पास बहुत से कॉल करने योग्य ऑब्जेक्ट हैं और उनके पास __doc__ स्ट्रिंग सही ढंग से भर चुकी है, लेकिन __doc__ पर आधारित सहायता के बजाय उन पर सहायता चलाने से उनकी कक्षा में मदद मिलती है।पाइथन की पाइडोक सहायता फ़ंक्शन कहां प्राप्त करता है?

मैं इसे बदलना चाहता हूं ताकि उन पर चलने में मदद से अनुकूलित मदद मिलती है जो अनिवार्य रूप से दिखती है कि अगर वे __call__ लागू करने वाले वर्ग के उदाहरणों के बजाय वास्तविक कार्य करते हैं तो मुझे क्या चाहिए।

class myCallable: 
    def __init__(self, doc): 
     self.__doc__ = doc 

    def __call__(self): 
     # do some stuff 
     pass 

myFunc = myCallable("some doco text") 
help(myFunc) 

अधिक इस के उत्पादन की तरह लग रहे:

def myFunc(): 
    "some doco text" 
    # do some stuff 
    pass 

help(myFunc) 
+2

मेरा अनुमान है कि है यहां समस्या यह है कि क्लास-आधारित myFunc में टाइप इंस्टेंस है, जबकि दूसरे में टाइप फ़ंक्शन है। मुझे यकीन नहीं है कि उसके आस-पास कोई रास्ता है या नहीं। (प्रत्येक को देखने के लिए प्रिंट प्रकार (myFunc) आज़माएं) – Suppressingfire

+0

आप प्रकारों के बारे में सही हैं, क्या वह जानकारी pydoc के भीतर उपयोग की जाती है? –

उत्तर

5

help फ़ंक्शन (pydoc मॉड्यूल में लागू) प्रति-उदाहरण डॉकस्ट्रिंग खोजने के लिए तैयार नहीं है। मैंने मॉड्यूल के माध्यम से एक त्वरित रूप से देखा कि यह देखने के लिए कि क्या स्पष्ट सहायता प्रदान करने का कोई तरीका है, लेकिन ऐसा प्रतीत नहीं होता है। यह inspect मॉड्यूल का उपयोग यह निर्धारित करने के लिए करता है कि यह किस प्रकार की चीज है, और आपका myFunc फ़ंक्शन जैसा दिखता नहीं है, यह एक उदाहरण जैसा दिखता है। तो pydoc प्रिंट्स इसके बजाय इंस्टेंस की कक्षा के बारे में मदद करते हैं।

यह अच्छा होगा अगर __doc__ के समान आप __help__ विशेषता जोड़ सकते हैं, लेकिन इसके लिए कोई समर्थन नहीं है।

मैं यह सुझाव करने में संकोच है, लेकिन आपका सर्वश्रेष्ठ दांव एक नया help समारोह को परिभाषित करने के हो सकता है:

old_help = help 
def help(thing): 
    if hasattr(thing, '__help__'): 
     print thing.__help__ 
    else: 
     old_help(thing) 

और फिर अपने उदाहरणों पर एक __help__ विशेषता डाल:

class myCallable: 
    def __init__(self, doc): 
     self.__doc__ = doc 
     self.__help__ = doc 
+0

मैंने उस दृष्टिकोण को नहीं माना था, यह एक दिलचस्प सुझाव है। विशेष कार्यक्रम जहां मुझे सहायता के बारे में परवाह है, पहले से ही एक कस्टम कंसोल और पूर्ण है, इसलिए कस्टम सहायता आश्चर्यजनक नहीं है और इसे कस्टम कंसोल कोड के हिस्से के रूप में किया जा सकता है। –

2

मैं क्या अपने प्रश्न के बारे में बहुत स्पष्ट नहीं कर रहा हूँ

कोड में, मैं इस के उत्पादन में करना चाहते हैं बिल्कुल है मेरी समझ यह है कि आपके पास एक वर्ग और एक फ़ंक्शन है जिसमें आप परिभाषित हैं और आप जानना चाहते हैं कि उस फ़ंक्शन के लिए पाइथन को सहायता टेक्स्ट कहां मिलता है।

पायथन उस वर्ग/विधि में दिए गए दस्तावेज़ स्ट्रिंग से सहायता टेक्स्ट प्राप्त करता है।

आप एक वर्ग 'ए' और एक विधि "f" कि कक्षा में है और वहाँ समारोह "f" में docstrings हैं, तो निम्न टर्मिनल डंप की मदद करनी चाहिए अपने प्रश्न को स्पष्ट:

>>> class A: 
     def __init__(self): 
      self.c = 0 # some class variable 
     def f(self, x): 
      """this is the documentation/help text for the function "f" """ 
      return x+1 

>>> help(A.f) 
Help on method f in module __main__: 

f(self, x) unbound __main__.A method 
this is the documentation/help text for the function "f" 

>>> A.f.__doc__ 
'this is the documentation/help text for the function "f" ' 

उम्मीद है कि यह

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