при чтении документации на python и различных списках рассылки Я всегда читаю то, что выглядит немного как догма. Глобальных переменных следует избегать, как ад, они плохой дизайн ... ОК, почему бы и нет? Но есть ситуация с реальной жизнью, когда я не понимаю, как избежать такой картины.Как избежать глобальных переменных
Скажите, что у меня есть графический интерфейс, из которого можно загрузить несколько файлов из главного меню. Файловые объекты, соответствующие загруженным файлам, могут использоваться для полного GUI (например, средство просмотра изображений, которое отображает изображение и на котором различные действия могут выполняться с помощью различных диалогов/плагинов).
Есть ли что-то действительно не так с построением следующей конструкции:
- Menu.py -> файл будет загружен отсюда
- Main.py -> можно использовать загруженные файловые объекты здесь
- Dialog1.py -> или здесь
- Dialog2.py -> или там
- Dialog3.py -> или там
- ...
- Globals.py
где Globals.py будет хранить словарь, ключ есть имя загруженных файлов и значения соответствующих объектов файлов. Затем оттуда всякая часть кода, которая нуждается в этих данных, получит доступ к ней через слабые ссылки.
Извините, если мой вопрос выглядит (или есть) глупо, но вы видите какие-либо изящные или глобальные альтернативы? Одним из способов было бы инкапсулировать загруженный словарь данных в основной класс приложения Main.py, рассматривая его как центральную часть доступа GUI. Однако это также может привести к некоторым осложнениям, так как этот класс должен быть легко доступен из всех диалогов, которые нуждаются в данных, даже если они являются необходимыми прямыми детьми.
спасибо большое за вашу помощь
глобальные переменные не являются злом. Что зло использует в качестве изменяемой переменной. Глобальные переменные должны оставаться статичными и «неизменными», когда это возможно. Если вам нужно изменить содержимое словаря в файле globals.py, ничего хорошего. Кроме этого, для чтения все в порядке. – CppLearner
Да, глобальные «константы» в порядке, следует избегать глобальных «переменных». – monkut
ОК, я понимаю, что вы имеете в виду, но я до сих пор не вижу действительной альтернативы python для предложенного мной проекта, в котором может появляться загруженный словарь данных (новые загруженные файлы, удаленные файлы) – Eurydice