Как выборочно переопределить текст из справки Python (MYclass) чем-то более коротким и настраиваемым? - PullRequest
0 голосов
/ 01 января 2019

Я учусь писать удобные для пользователя классы и методы, и я бы хотел, чтобы пользователи знали, как их использовать из терминала.Стандартный Python help(MYclass) возвращает восемнадцать строк, которые мне не нужны, и это половина экрана для небольшого окна, и те, кто только изучает python, потеряют непрерывность, а предыдущие строки исчезнут сверху.

Есть ли способ?Я могу переопределить то, что показывает help(MYclass) (или help(MYmethod)), чтобы он отображал (в данном случае) однострочную строку документации?

Хотя в некоторых средах IDE строки документов отображаются в виде пузырьков, терминалы не взаимодействуют.( Отображаются ли в Python сообщения с тройными кавычками (docstring) при вводе в IDE, отличных от IDLE? ):

enter image description here

Поэтому вместо этого я обратился к help за помощью, но help слишком 10110 * очень полезен со всеми этими дополнительными строками шаблона.

Затем я подумал о переопределении справки:

def hhelp(x):
    return x.__doc__
help = hhelp

но я решил, что это зло;как переопределение числа 7, и я бы хотел, чтобы help(some builtin) все еще работал нормально, а выборочный угон происходил только для MYclass es.

Всегда есть

def doc(x):
    return x.__doc__

, еслиЯ не могу найти ничего, что выборочно перехватывает help().


class A(object):
    """instantiate a = A(x), then use a.sqr() to get x**2"""
    def __init__(self, x):
            self.x = x
    def sqr(self):
            return x**2

, что приводит к девятнадцати строкам.Я бы хотел показать только одну строку документации.

Help on class A in module __main__:

class A(__builtin__.object)
 |  instantiate a = A(x), then use a.sqr() to get x**2
 |  
 |  Methods defined here:
 |  
 |  __init__(self, x)
 |  
 |  sqr(self)
 |  
 |  ----------------------------------------------------------------------
 |  Data descriptors defined here:
 |  
 |  __dict__
 |      dictionary for instance variables (if defined)
 |  
 |  __weakref__
 |      list of weak references to the object (if defined)

Ответы [ 2 ]

0 голосов
/ 01 января 2019

Вы можете установить встроенную функцию help, чтобы отобразить строку __doc__ для классов и использовать исходную help для других объектов:

import inspect
import pydoc

class Helper(object):
    def __init__(self):
        self.help = __builtins__.help

    def __call__(self, obj):
        if inspect.isclass(obj):
            return pydoc.pager(obj.__doc__)
        else:
            return self.help(obj)

__builtins__.help = Helper()

, которая производит следующеевывод:

class Foo:
    """This is the docstring."""

    def foo(self):
        return None

help(Foo)

# Output:
# This is the docstring.
0 голосов
/ 01 января 2019

Как help(help) указывает, что он полагается на pydoc, в частности pydoc.help.

|Определите встроенную «помощь».
|Это оболочка для pydoc.help (с изюминкой).

Изучая исходный код, мы обнаруживаем, что он использует TextDoc.docclass для генерации текста справки для классов.Таким образом, мы можем установить этот метод, чтобы сгенерировать наш собственный текст справки: 1

import pydoc

def docclass(self, object, *args, **kwargs):
    return pydoc.getdoc(object)

pydoc.TextDoc.docclass = docclass

Теперь мы получим только строку __doc__ в тексте справки:

class Foo:
    """This is the docstring."""

    def foo(self):
        return None

help(Foo)

# Output:
# Help on class Foo in module __main__:
# 
# This is the docstring.

1.Синтаксис специфичен для Python 2.7, поскольку OP использует соответствующий тег.Хотя, похоже, он работает и с другими версиями Python.

...