Pydev 代码补全全面支持

22 投票
5 回答
6074 浏览
提问于 2025-04-16 18:51

在很多情况下,比如函数参数,Pydev 并不能静态地知道一个变量的类型。因此,当你输入 . 或者使用 ctrl+space 时,代码补全功能就无法正常工作。

大多数情况下,当你在设计软件时,其实你是知道运行时会是什么类型的。那么,有没有办法让 Pydev 知道该如何正确地进行代码补全呢?

我想这可能需要 Pydev 的某个特定功能,或者甚至是一个新的 Python PIP。

这实际上似乎是所有动态语言普遍存在的问题……

更新:
也许举个例子会更清楚:

def some_func(a_list, an_object):
    a_list.app        # Here I would not get code completion for append

这是一个如果 Pydev(或某个 PIP)支持的话,可能会有效的例子:

from someobj import SomeObject
def some_func(a_list, an_object):
    # typecast: a_list=list
    # typecast: an_object=SomeObject
    a_list.app        # Now code completion would show append

我并不是在推荐这个具体的方法——这只是一个可能有效的系统的例子。当然,这种方式不应该是强制的——但有时候,无法提示类型确实让人感到烦恼。

5 个回答

1

如果你使用 PyCharm 这个工具,你可以选择使用 epydoc 或 sphinx 这两种文档字符串的风格,并且可以根据你选择的风格来说明参数的类型和函数的返回值类型(更多讨论

5

从PyDev 2.8.0版本开始,你可以使用Sphinx或Epydoc的注释来帮助代码补全。想了解更多,可以查看这个链接:http://pydev.org/manual_adv_type_hints.html

22

[编辑]

从 PyDev 2.8.0 版本开始,它可以通过文档字符串和注释来识别对象的类型。

详细信息请查看:http://pydev.org/manual_adv_type_hints.html,了解支持的格式。

[在 PyDev 2.8.0 之前]

之前,它只支持使用 assert isinstance 调用(这仍然有效):

assert isinstance(a_list, list)

PyDev 将能够识别它,并为其提供正确的代码补全(请注意,如果你发现使用断言会让你的代码变慢,你可以在后面运行 Python 时去掉这些断言:Python 优化 (-O 或 PYTHONOPTIMIZE) 是做什么的?

撰写回答