PyDev: @DynamicAttrs для модулей - PullRequest
       5

PyDev: @DynamicAttrs для модулей

3 голосов
/ 23 сентября 2011

В программе, которую я пишу, я создал модуль с именем settings, который объявляет несколько констант, но загружает другие из файла конфигурации, помещая их в пространство имен модуля (например: значение π может быть в коде модуля, но вес пользователя в файле конфигурации).

Это так, что в других модулях я могу сделать:

from settings import *

У меня все работает нормально, но - используя Aptana Studio / PyDev, инструмент анализа кода выдает undefined variable errors вот так:

enter image description here

Я обнаружил здесь , что есть флаг, который можно использовать для предотвращения такого поведения в строках документации класса, но он не имеет никакого эффекта, если я пытаюсь использовать его на уровне модуля. Поэтому мне интересно две вещи:

  • Есть ли способ выборочно избавиться от этих ошибок (это означает, что я бы не хотел полностью отключать опцию «помечать как ошибки неопределенные переменные»: в других модулях это на самом деле может быть ошибка)?

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

Предупреждающая записка : Я прекрасно осведомлен о том, что дикий импорт не рекомендуется.

Ответы [ 2 ]

2 голосов
/ 23 сентября 2011

На самом деле вы, вероятно, будете иметь ту же ошибку, даже если это был не дикий импорт (т. Е. Импорт settings / settings.MY_VARIABLE все равно будет отображать ошибку, потому что анализ кода не сможет ее найти).

Помимо @UndefinedVariable в каждом месте, которое ссылается на него ( CTRL + 1 покажет эту опцию), я думаю, что лучшим шаблоном для вашего модуля будет:

MY_VARIABLE = 'default value'
...

update_default_values() # Go on and override the defaults.

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

В противном случае, если вы не знаете их раньше, я думаю, что лучшим подходом будет использование метода (т. Е. get_settings('MY_VARIABLE')).

Не имеет отношения к актуальной проблеме. Я бы действительно советовал не использовать здесь дикий импорт (и даже не импортировать константу ... т.е. 1016 *).

Лучшим подходом для модуля настроек всегда является использование:

import settings
settings.MY_VARIABLE 

(потому что в противном случае, если какое-либо место решит, что хочет изменить MY_VARIABLE, любое место, которое поместило ссылку в свое собственное пространство имен, вероятно, никогда не получит измененную переменную).

Еще более безопасный подход - использовать метод get_setting('var'), поскольку он позволит вам более лениво загружать ваши предпочтения (то есть: не загружать при импорте, но когда он вызывается в первый раз).

0 голосов
/ 23 сентября 2011

Вы можете использовать Ctrl-1 при ошибке и выбрать @UndefinedVariable или набрать #@UndefinedVariable в строке с ошибкой, которую хотите игнорировать.

Вы можете попытаться добавить модуль для сканированияинтерпретатором PyDev, перейдя в Window> Preferences, затем PyDev> Interpreter - Python.На вкладке "Библиотеки" нажмите New Folder и перейдите в каталог, содержащий settings, затем нажмите Apply.Надеемся, что Pydev найдет ваш пакет и распознает дико импортированные переменные.

...