如何像PDT一样在PyDev中欺骗代码补全?
有没有办法通过告诉PyDev一个变量的类型来帮助代码补全呢?
在PDT中,你可以使用类似PHPDoc的语法来实现这个目的:
/* @var $my_var MyClass */
$my_var = myFunction();
// PDT is able to figure out that $my_var is a MyClass object.
但是到现在为止,我还没弄明白在Python中怎么做。
3 个回答
3
我在使用PyDev 2.2.2的时候,发现assert这个小技巧好像不太管用;难道它应该还可以吗?
不过我试了另一个小技巧,这个倒是有效:
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")
不过无论如何,这些方法看起来都挺不靠谱的,我希望能有更简单、更干净的做法(比如文档、注释之类的)
3
其实,你可以这样做,如果你使用 assert isinstance()。
比如:
a = function()
assert isinstance(a, MyClass)
a. <- would get the proper completions
需要注意的是,Pydev 会分析函数的返回值,所以在很多情况下,它可能会知道这些信息。
另外,如果你使用 python -O 这个命令,运行时就不会有额外的负担,因为这个命令会去掉 assert 的检查。
1
不行(可以查看文档)。看起来PyDev只会对已经导入的内容和语言的关键字进行自动补全。
不过,这种情况似乎不会经常出现。提到的那个变量,只有在作为函数参数传入且没有默认值时,PyDev才会不知道它是什么。而且,如果你有一个函数是针对你自己定义的类在操作,那么这个变量应该是类的成员(这样自动补全就能正常工作了)。