2010-01-06 78 views
3

有没有办法通过告诉它一个变量的类型来帮助PyDev代码完成?用PyDev像PDT一样完成代码?

随着PDT,可以使用PHPDoc的语法类似这样的目的:

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

但是到现在为止,我无法弄清楚如何做相同的蟒蛇。

+0

[Pydev Code Completion for everything]的可能重复(http://stackoverflow.com/questions/6218778/pydev-code-completion-for-everything) – 2014-09-01 12:42:06

回答

1

不是(请参阅docs)。它看起来像PyDev完成导入的东西和语言关键字。

虽然这似乎不会出现很多。有问题的变量看起来像只有pydev未知,如果它作为一个函数参数传递没有默认值。并且,如果你有一个函数操作你自己的类,它应该是一个类成员(所以自动完成已经可以工作)。

+0

我不确定你为什么说它不会出现许多。正如你所说,任何时候你将一个变量传递给一个方法,PyDev都没有办法猜测它的类型,除非它有一个默认值 - 但我会说与缺少方法相比,使用默认参数的方法非常罕见,不是吗? ? – phtrivier 2011-09-16 09:24:19

3

其实,你可以,如果你做一个断言isinstance()

如:

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

注意Pydev的做分析的函数的返回,因此,它可能是它知道,在案件数量。

另外,如果你使用Python应该不会有运行时的处罚-O(这将删除该断言)

3

似乎断言招不为我用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") 

在所有情况下,它看起来很哈克,我会爱一个更清洁的方式做事情(文档,注释,等等)

+0

感谢您分享此方法 - 对我也很好(PyDev v2.5)。 'assert isinstance'只在同一个方法内工作;它似乎不会将该类型传播到实例变量中。 – Justin 2012-05-17 12:42:23