我在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
是否可以使这项工作?
谢谢!
答案 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知道为了自动完成而读取其中包含的类的文件。