2010-06-30 59 views
3

我在Windows XP机器上使用Eclipse和PyDev和Iron Python。我有一个类定义,它接受一个对象作为其本身是另一个类的一个这样的实例化参数:使用Eclipse + PyDev获取函数参数的自动完成

myObject1 = MyClass1() 
myObject2 = MyClass2(myObject1) 

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

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

是否有可能使这项工作?

谢谢!

+0

我真的很希望有人会为此做出明确的回答。一些人已经收到了这个问题,所以一定要更新它,如果你有任何其他的东西你自己。 – 2010-07-02 19:15:07

回答

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()是不正确的。

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

0

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

+1

是的,我在所有文件夹中都有空的__init__.py文件。当你创建一个新的包时,Eclipse很好地为你创建它们。 – RPG 2010-06-30 22:24:48

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 
+0

也许使用参数类型的文档:https://www.pydev.org/manual_adv_type_hints.html – 2016-02-29 13:29:58

相关问题