在许多情况下(例如函数参数)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
我不支持这种特定的方法 - 它只是可以工作的系统的一个例子。同样,当然这不应该是强制性的 - 但有时候缺乏提示类型的可能性很烦人。
答案 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
这种语法对执行没有影响,也不会对函数中传递的实类型进行任何检查,而是使您的代码更具可读性并使代码完成工作。