Получение автозаполнения с помощью Eclipse + PyDev для аргументов функции - PullRequest
3 голосов
/ 01 июля 2010

Я использую Eclipse и PyDev с Iron Python на компьютере с Windows XP.У меня есть определение класса, которое принимает объект в качестве аргумента, который сам является экземпляром другого класса, например:

myObject1 = MyClass1()
myObject2 = MyClass2(myObject1)

Два определения класса находятся в разных модулях, myclass1.py и myclass2.pyнадеялся, что автозаполнение будет работать на myObject1, когда он используется в myclass2.Другими словами, в файле myclass2.py у меня может быть что-то вроде этого:

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

Возможно ли сделать эту работу?

Спасибо!

Ответы [ 3 ]

1 голос
/ 22 июня 2012

Со спам-линией (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
1 голос
/ 01 июля 2010

Используя Jython в PyDev / Eclipse, я тоже задумался над этим. Завершение кода должно работать для методов MyClass1, которые вы использовали где-то еще в MyClass2, но не для всего 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 голосов
/ 01 июля 2010

У вас есть __init__.py в вашей исходной папке?Он может быть пустым, но он должен существовать во всех папках, чтобы Python мог прочитать файлы, содержащиеся в нем, для классов с целью автозаполнения.

...