Pydev не будет разрешать динамически созданные атрибуты

1

Приветствия SO,

У меня есть странная проблема, которую я, похоже, не могу решить:

Я работаю с плагином pydev с eclipse Helios в Windows XP (если это имеет значение).

У меня есть модуль, который содержит класс. __init__ этого класса принимает параметр, который определяет набор атрибутов, которые должен иметь метод этого класса.

Поскольку мне не разрешено показывать фактический код, я могу привести следующую аналогию:

class Car:
    def __init__(self, attrs):
        # attrs is a dictionary.
        # the keys of attrs are the names of attributes that this car should have
        # for example, a key of attr could be 'tires'

        # the values of attrs are the values of the attributes which are the keys
        # so if the key is 'tires', it value might be 4

Теперь, поскольку я динамически устанавливаю эти переменные во время выполнения, Pydev не может дать мне предложения, когда я это делаю:

c = Car()
print c.tires

Когда я печатаю "c". +, pydev не предлагает шины в качестве предложения.

Как я могу получить эту функциональность? Или это просто не то, что pydev может сделать в настоящее время?

Буду признателен за любую помощь

  • 0
    Никто не мог разрешить динамически созданные вещи вообще
Теги:
dynamic
pydev
resolve

2 ответа

0
Лучший ответ

+1 для Имрана для его решения. Но, мне было лучше решение:

Create all attributes in `__init__`.
When it comes time to be dynamic, delete the unwanted attributes.

Таким образом, несмотря на то, что в автозаполнении все еще имеется надмножество всех атрибутов, память не пропадает.

1

Это общая проблема, с которой страдают все языковые IDE. Pydev не имеет возможности узнать, какие атрибуты Car.__init__ задаются на экземплярах Car, без выполнения вашего кода. Если вы используете переменные класса для атрибутов, установленных в __init__, Pydev должен иметь возможность предлагать автозаполнение предложения.

class Car(object):
    tires = 4

    def __init__(self, attrs):
         self.tires = attrs.get('tires', self.tires)
         self.tires += attrs.get('spare', 0)
  • 0
    Я уже делаю это (+1), но это кажется таким хакерским. Мне интересно, есть ли лучший способ.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню