Pydev Code完成一切

时间:2011-06-02 18:34:22

标签: python eclipse pydev code-completion

在许多情况下(例如函数参数)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 个答案:

答案 0 :(得分: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:What does Python optimization (-O or PYTHONOPTIMIZE) do?

答案 1 :(得分:5)

从PyDev 2.8.0开始,可以使用Sphinx或Epydoc注释来完成代码: http://pydev.org/manual_adv_type_hints.html

答案 2 :(得分:1)

如果您使用PyCharm,您可以选择epydoc或sphinx文档字符串样式,并根据该样式指定参数类型和函数返回值(further discussion

答案 3 :(得分:0)

我通常采取什么措施来规避这一点。

def func(my_list_param):
    my_list_param = []
    my_list_param.appe # at this stage I would get code completion.

请记住在测试或提交时删除变量初始化。 哦,顺便说一下,标记为答案的回答对我来说似乎不起作用。

答案 4 :(得分:0)

如果您在代码中使用Python> = 3.5,则可以在函数声明(26.1. typing — Support for type hints)中指定参数类型,因此您的代码可以是:

from someobj import SomeObject

def some_func(a_list: list, an_object: SomeObject):
    a_list.app           # Code completion works
    an_object.a_method() # Code completion works

这种语法对执行没有影响,也不会对函数中传递的实类型进行任何检查,而是使您的代码更具可读性并使代码完成工作。