Могу ли я отформатировать строку документации в python3

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

def run_tests(args):
    """run tests on methods in {0}

    usage: {0} --tests
    """.format(__file__)
    pass

но когда я запускаю help(run_tests) в интерпретаторе, я не получаю строку документации. Если я удалю {} и .format(), строка документации вернется, как и ожидалось.

Я хотел бы видеть вывод примерно так:

Help on function run_tests in module myfile:

run_tests(args)
    runs tests on methods in myfile.py

    usage:  myfile.py --tests

Есть ли способ сделать это в python3?


person posop    schedule 22.08.2015    source источник
comment
ни один из них не работает для Python 2; см. stackoverflow.com/questions/36705130/ для решения   -  person abukaj    schedule 20.07.2017


Ответы (2)


Вы должны отредактировать атрибут функции __doc__ после объявления функции

def run_tests(args):
    pass

run_tests.__doc__ = """\
    run tests on methods in {0}

    usage: {0} --tests
    """.format(__file__)

или сделать декоратор для docring

def doc(arg):
    """Docstring decorator.

    arg:    Docstring text or object.
    """
    import inspect

    def decorator(func):
        if type(arg) is str:
            func.__doc__ = arg
        elif inspect.isclass(arg):
            func.__doc__ = arg.__doc__
        else:
            func.__doc__ = None

        return func
    return decorator

@doc(
    f"""run tests on methods in {__file__}

    usage: {__file__} --tests
    """
)
def run_tests(args):
    pass
person Corleo    schedule 26.02.2019

На основе шаблона строк документации Python я разработал следующий декоратор:

def _formatDostring(*args, **kwargs):
    def decorator(o):
        o.__doc__ = o.__doc__.format(*args, **kwargs)
        return o

    return decorator

@_formatDostring(__file__=__file__)
def run_tests(args):
    """run tests on methods in {__file__}

    usage: {__file__} --tests
    """
    pass
person abukaj    schedule 20.07.2017