使用Eclipse + PyDev自动完成函数参数

时间:2010-06-30 22:04:11

标签: python eclipse pydev

我在Windows XP机器上使用Eclipse和PyDev和Iron Python。我有一个类定义,它将一个对象作为一个参数,它本身就是另一个类的实例化,如下所示:

myObject1 = MyClass1()
myObject2 = MyClass2(myObject1)

两个类定义在不同的模块中,myclass1.py和myclass2.py,我希望在myclass2中使用myObject1时可以自动完成myObject1。换句话说,在myclass2.py文件中我可能有这样的东西:

""" myclass2.py """
class MyClass2():
    def __init__(self, myObject1):
        self.myObject1 = myObject1
        self.myObject1.  <============== would like auto code completion here

是否可以使这项工作?

谢谢!

3 个答案:

答案 0 :(得分:1)

在PyDev / Eclipse中使用Jython,我也对此感到疑惑。代码完成应该适用于您在MyClass2中的其他地方使用的MyClass1方法,但不适用于整个API。我认为这是因为您可以动态地在类中添加和删除方法,因此Eclipse无法保证任何特定方法存在,或者方法列表已完成。

例如:

>>> class a:
...     def b(self):
...         print('b')
...
>>> anA = a()
>>> anA.b()
b
>>> del a.b
>>> anA.b()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: a instance has no attribute 'b'

因此,如果代码完成在这里显示方法b(),那就不正确了。

类似地,

>>> class a:
...     pass
...
>>> anA = a()
>>> anA.b()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: a instance has no attribute 'b'
>>> def b(self):
...     print('b')
...
>>> a.b = b
>>> anA.b()
b

因此,未显示方法b()的代码完成将是不正确的。

我可能错了,但我认为这是一个可靠的猜测。 :)

答案 1 :(得分:1)

使用带有创建对象的垃圾邮件行(if False ...),我的Pydev 2.5就可以了。

""" myclass2.py """
    class MyClass2():
    def __init__(self, myObject1):
        if False : myObject1 = MyClass1()
        self.myObject1 = myObject1        
        self.myObject1.  <============== would like auto code completion here

答案 2 :(得分:0)

您的源文件夹中是否有__init__.py?它可以是空的,但它应该存在于所有文件夹中,以便Python知道为了自动完成而读取其中包含的类的文件。