Pydev не будет разрешать динамически созданные атрибуты - PullRequest
1 голос
/ 18 мая 2011

Привет ТАК,

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

Я работаю с плагином 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's value might be 4

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

c = Car()
print c.tires

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

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

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

Ответы [ 2 ]

1 голос
/ 18 мая 2011

Это общая проблема, от которой страдают все динамические языковые среды. Пидев не может знать, какие атрибуты 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 голосов
/ 27 мая 2011

+ 1 к Имрану за его решение. Но лучшее решение пришло мне в голову:

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

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

...