Приветствия 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 может сделать в настоящее время?
Буду признателен за любую помощь
+1 для Имрана для его решения. Но, мне было лучше решение:
Create all attributes in `__init__`.
When it comes time to be dynamic, delete the unwanted attributes.
Таким образом, несмотря на то, что в автозаполнении все еще имеется надмножество всех атрибутов, память не пропадает.
Это общая проблема, с которой страдают все языковые 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)