如何在PyCharm中自动生成文档字符串中字段的类型?

29

当我创建一个带参数的函数时,PyCharm会提供创建文档字符串并包含:param param_name:字段的选项,这非常好。但我还需要添加:type param_name:

因此,从那里开始:

def foo(bar, xyz):
    return bar + xyz

使用生成文档字符串选项后,我发现即使启用了在文档存根中插入“类型”和“rtype”,也没有。


def foo(bar, xyz):
    """
    :param bar:
    :param xyz:
    """
    return bar + xyz

而且我希望那样

def foo(bar, xyz):
    """
    :param bar:
    :type bar:
    :param xyz:
    :type xyz:
    """
    return bar + xyz
5个回答

16

前往 设置 > 编辑器 > 通用 > 智能键,然后勾选“在文档注释存根中插入类型占位符”的复选框。

输入图像描述


6
这个设置现在在编辑器的“常规”菜单下的“智能键入”->“Python”子菜单中。但是我想知道PyCharm是否应该自动从我的方法声明中的类型注释获取"type":def check(self, key: str, not: str, id: str) -> str: - bomben

15

根据文档

如果已配置, 可以使用typertype标签生成文档注释桩。

点击链接:

...

  1. 智能键页面中,选中插入'type'和'rtype'到文档注释桩复选框。

请注意,文档已经更新,当前的配置指南如下:
启用文档注释 1. 打开 PyCharm 设置的 Editor | General | Smart Keys 页面(快捷键为 ⌃⌥S)。 2. 在“输入”部分,选择或清除“插入文档注释桩”复选框。 3. 然后,滚动到“在文档注释桩中插入类型占位符”选项并根据需要选择或清除复选框。有关详细信息,请参阅选项说明。
一旦您完成此操作,请将光标放在定义中的参数名称上,激活智能键功能(默认情况下为Alt+Enter),然后选择在docstring中指定参考类型。这将插入适当的注释行。同样,您可以将光标放在函数/方法名称上,并选择在docstring中指定返回类型

1
对我不起作用。我只添加了“:return: :rtype:”(在重新启动pycharm后也是如此)。 - FunkySayu
@FunkySayu请提供一个例子,或者考虑向开发人员提交错误报告。 - jonrsharpe
@FunkySayu 看起来没有一步解决方案;我已经更新了答案。 - jonrsharpe
erf... 这也是我找到的。也许我会为此提出一个功能请求。无论如何,谢谢你的帮助。 - FunkySayu
3
我偶然发现了一个问题:当你使用Alt+Enter键生成文档字符串时,解决方案不起作用(:type:、:return:和:rtype:没有生成)。但是,如果你先定义函数,然后写上""",文档就会被正确地生成。请检查一下是否在你的电脑上也有这个问题,并更新你的回答,我会将其标记为已解决。 - FunkySayu
显示剩余6条评论

8

首先,检查是否启用了restructuredText插件。检查方法:进入偏好设置 - 插件 - restructuredText(如果未启用,请勾选以启用它)

接下来,在同一偏好设置选项卡中,导航到工具 > Python集成工具 > 文档字符串

然后:

  • 更改文档字符串格式:restructuredText(而不是普通文本)
  • 勾选“分析文档字符串中的Python代码”
  • 勾选“呈现stdlib的外部文档”

enter image description here 应用更改并关闭。

最后,为了验证更改,进入函数块并添加三个引号(单引号或双引号),然后按Enter或空格,您应该看到自动生成的docstring。


更改文档字符串格式正是我所需要的 - 谢谢! - dermen

4

只需要勾选此复选框:

编辑器 - 通用 - 智能键 - 在文档注释存根中插入类型占位符。

还要记得启用此选项,以便您可以使用 Alt+enter 自动插入文档注释:

编辑器 - 通用 - 智能键 - 插入文档注释存根


2
最初的回答已经给出了,但我认为有必要指出您可以使用。
def foo(bar, xyz):
    """


    :param bar_type bar:
    :param xyz_type xyz:
    """
    return bar + xyz

使用bar_typexyz_type来表示变量的类型。一个好的提示是,您可以使用|来设置多种可能的类型。例如:

Original Answer翻译成"最初的回答"

def foo(bar, xyz):
    """


    :param float|int bar:
    :param numpy.array xyz:
    """
    return bar + xyz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接