Как программно изменить строки документации в файле - PullRequest
0 голосов
/ 18 сентября 2018

Мне нужно изменить строки документов в группе файлов, чтобы добавить к ним значения по умолчанию для входных параметров, если они присутствуют в конструкторе класса или сигнатуре функции.

Итак, скажем, у меня есть следующееучитывая:

# a bunch of code

class A:
    """A good class.

    Parameters
    ----------
    p : int
        A powerful parameter.

    q : float, optional
        An even more powerful parameter.
    """
    def __init__(self, p=3, q=.3):
        self.p = p
        self.q = q

# a bunch of more code

Мне нужно просмотреть весь файл, найти все такие экземпляры и изменить их на:

# a bunch of code

class A:
    """A good class.

    Parameters
    ----------
    p : int, optional (default=3)
        A powerful parameter.

    q : float, optional (default=.3)
        An even more powerful parameter.
    """
    def __init__(self, p=3, q=.3):
        self.p = p
        self.q = q

# a bunch of more code

И затем сохранить его обратно в тот же или другойфайл.

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

1 Ответ

0 голосов
/ 18 сентября 2018

Это именно то, что вы хотите сделать:

1- Получите доступ к строке документации каждого метода и измените ее так, чтобы она включала значения по умолчанию

Для этого необходимо: 1.1- Перечисление атрибутов 1.2-Делать что-то с каждым атрибутом

modify = [a for a in dir(A) if not (a.startswith('__') and a.endswith('__'))]

(Конечно, есть способ проверить, является ли атрибут закрытым, это просто быстрый способ)

Затем, чтобы ваш список атрибутов мог изменить васчтобы узнать значения по умолчанию, используйте inspect:

import inspect

inspect.getfullargspec(<YOURATTRIBUTE HERE>)

FullArgSpec(args=['self', 'p', 'q'], varargs=None, varkw=None, defaults=(3, .3), kwonlyargs=[], kwonlydefaults=None, annotations={})

Все, что вам нужно сделать сейчас, это использовать эту информацию для изменения строки документации

...