【问题标题】:Trick code completion with PyDev like with PDT?像使用 PDT 一样使用 PyDev 完成代码?
【发布时间】:2011-01-02 05:49:40
【问题描述】:

有没有办法通过告诉它变量的类型来帮助 PyDev 代码完成?

使用 PDT,您可以使用类似 PHPDoc 的语法来实现这样的目的:

/* @var $my_var MyClass */
$my_var = myFunction();
// PDT is able to figure out that $my_var is a MyClass object.

但是直到现在,我还是不知道如何在 python 中做同样的事情。

【问题讨论】:

标签: python pydev code-completion


【解决方案1】:

断言技巧似乎不适用于 PyDev 2.2.2 ;它仍然应该?

但是我尝试了另一个技巧,并且工作如下:

class Foo(object):
    def __init__(self, bar):
       self.bar = bar
       # Tricking PyDev
       if (not self.bar):
          self.bar = Bar()
          raise Exception("Bar should not be null")

在所有情况下,它看起来都很老套,我希望有一种更简洁的方式来做事(文档、注释等)

【讨论】:

  • 感谢分享这个方法——对我也很有效(PyDev v2.5)。 assert isinstance 仅在同一方法内工作;它似乎没有将类型传播到实例变量中。
【解决方案2】:

其实你可以通过 assert isinstance() 来实现

例如:

a = function()
assert isinstance(a, MyClass)
a. <- would get the proper completions

请注意,Pydev 确实会分析函数的返回,因此它可能在很多情况下都知道这一点。

此外,如果您使用 python -O(这将删除断言),则不应该有运行时惩罚

【讨论】:

    【解决方案3】:

    不(见docs)。看起来 PyDev 完成了导入的东西和语言关键字。

    不过,这似乎不会出现很多。有问题的变量似乎只有在它作为没有默认值的函数参数传入时才会被 pydev 未知。而且,如果您有一个在自己的类上运行的函数,那么它似乎应该是一个类成员(所以自动完成已经可以工作了)。

    【讨论】:

    • 我不知道你为什么说它不会出现很多。正如您所说,每当您将变量传递给方法时,PyDev 都无法猜测它的类型,除非它具有默认值 - 但我会说与没有默认参数的方法相比,具有默认参数的方法非常罕见,不是吗? ?
    猜你喜欢
    • 2011-09-07
    • 2012-02-15
    • 1970-01-01
    • 2013-04-20
    • 1970-01-01
    • 1970-01-01
    • 2013-02-08
    • 2011-12-26
    • 2017-03-05
    相关资源
    最近更新 更多