أين تعمل وظيفة Pydoc Pydoc في الحصول على محتواها؟

StackOverflow https://stackoverflow.com/questions/1787056

  •  21-09-2019
  •  | 
  •  

سؤال

لدي الكثير من الكائنات القابلة للاستدعاء ولديهم جميعًا __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)
هل كانت مفيدة؟

المحلول

ال 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

نصائح أخرى

أنا لست واضحًا جدًا بشأن سؤالك بالضبط. أفهم أن لديك فصلًا ودالة محددة فيه وتريد أن تعرف من أين يحصل Python على نص المساعدة لهذه الوظيفة.

يحصل Python على نص المساعدة من سلاسل المستند الواردة في تلك الفئة/الطريقة.

إذا كان لديك فئة "A" وطريقة "F" في تلك الفئة ، وهناك مستدخلات في الدالة "F" ، فيجب أن يساعد تفريغ الطرف التالي في توضيح سؤالك:

>>> 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" '

أتمنى أن يساعدك هذا

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top