Я новичок в python, и я читал, что с помощью global
передавать переменные другим функциям считается noobie, а также плохой практикой. Я хотел бы отказаться от использования глобальных переменных, но я не уверен, что делать вместо этого.Альтернатива передаче глобальных переменных вокруг классов и функций
Прямо сейчас у меня есть пользовательский интерфейс, который я создал в wxPython как отдельный класс, и у меня есть другой класс, который загружает настройки из файла .ini. Поскольку настройки в пользовательском интерфейсе должны совпадать с настройками в .ini, как мне передать эти значения? Я мог бы использовать что-то вроде: Settings = Settings()
, а затем определить переменные как-то вроде self.settings1
, но тогда мне нужно было бы сделать Settings
глобальной переменной, чтобы передать его моему классу интерфейса (которого бы не было, если бы я назначил в нем main()
).
Итак, каков правильный и путинский способ обхода этих переменных?
Редактировать: Вот код, с которым я работаю, и я пытаюсь заставить его работать, как пример Алексея Мартелли. Следующий код сохраняется в Settings.py
:
import ConfigParser
class _Settings():
@property
def enableautodownload(self): return self._enableautodownload
def __init__(self):
self.config = ConfigParser.ConfigParser()
self.config.readfp(open('settings.ini'))
self._enableautodownload=self.config.getboolean('DLSettings', 'enableautodownload')
settings = _Settings()
Всякий раз, когда я пытаюсь обратиться к Settings.settings.enableautodownload
из другого файла я получаю: AttributeError: 'module' object has no attribute 'settings'
. Что я делаю не так?
Редактировать 2: Не обращайте внимания на проблему, я перепечатал код, и теперь он работает, поэтому он должен быть простой ошибкой орфографии или синтаксиса.
Есть случаи, когда хорошо использовать глобальные переменные, где общность прохождения вокруг объекта повсюду перевешивается неудобствами. Вы должны избегать этого, когда начинаете, пока не почувствуете, когда это уместно. –
выглядит как правильный импорт, должен быть 'from Settings import setting ', тогда вы можете использовать его, например, как' print settings.enableautodownload'. – flow