【问题标题】:How to programmatically change the docstrings in a file如何以编程方式更改文件中的文档字符串
【发布时间】:2018-09-18 08:15:57
【问题描述】:

我需要修改一堆文件中的文档字符串,为它们添加输入参数的默认值(如果存在于类构造函数或函数签名中)。

可以这么说,我给出了以下内容:

# 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

然后将其保存回相同或不同的文件。

我试图确保在文档字符串中提及默认值,这对人类来说很容易做到,但我希望我不必手动浏览整个包。

【问题讨论】:

标签: python inspect docstring


【解决方案1】:

这正是你想要做的:

1- 访问每个方法的文档字符串并修改它以包含默认值

这需要: 1.1- 列出属性 1.2- 对每个属性做一些事情

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

(当然有一种方法可以检查一个属性是否是私有的,这只是一种快速的方法)

然后为你的属性列表修改你想要的默认值,使用检查:

import inspect

inspect.getfullargspec(<YOURATTRIBUTE HERE>)

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

您现在需要做的就是使用该信息来修改文档字符串

【讨论】:

  • 是的,这是我知道的部分。 1.您假设我得到了一个对象或类名,但是给了我一个文件,并且我需要保留文件中未涉及的所有其他内容,例如开头的 cmets 等。 2. 我知道这并不难,但我希望我不必自己解析文档字符串。我也看到 CI 管道(我猜是 circle-ci 或 travis-ci)检查文档字符串。所以我希望用他们用的任何东西来解决这个问题。
猜你喜欢
  • 2017-01-25
  • 2011-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多