Как мне назвать мой глобальный модуль в Python? - PullRequest
1 голос
/ 21 января 2010

Я пишу приложение на Python, и у меня есть ряд универсальных переменных (таких как ссылка на главное окно, пользовательские настройки и список активных элементов в пользовательском интерфейсе), которые должны быть доступно из всех частей программы 1 . Я только что понял, что назвал модуль globals.py и импортирую объект, который содержит эти переменные с оператором from globals import globals в верхней части моих файлов.

Очевидно, это работает, но я немного опасаюсь называть мой глобальный объект так же, как встроенный в Python. К сожалению, я не могу придумать гораздо лучшего соглашения об именах для него. global и all также являются встроенными Python, universal кажется неточным, state не совсем правильная идея. Я склоняюсь к static или env, хотя оба имеют конкретное значение в компьютерных терминах, которое предлагает другую концепцию.

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

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

Ответы [ 6 ]

3 голосов
/ 21 января 2010

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

Например, главное окно, вероятно, перейдет в переменную в main.py. Пользовательские настройки могут войти в usersettings.py, который предоставит функции для просмотра и изменения настроек.

Если другой части системы требуется доступ к пользовательским настройкам, это просто вопрос:

from usersettings import get_setting, set_setting
...
# Do stuff with settings

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

1 голос
/ 21 января 2010

Я бы назвал это env. Существует небольшой риск того, что кто-то будет путать его с os.environ (особенно если вы организуете свой код так, чтобы вы могли назвать его myapp.environ).

Я бы также сделал все, что доступно для myapp.environ свойством класса, чтобы я мог устанавливать точки останова в установщике, когда придет день, который мне нужен.

1 голос
/ 21 января 2010
`config` or `settings`
0 голосов
/ 22 января 2010
from globals import Globals

Это исправит конфликт, а также будет следовать рекомендациям PEP 8.

Кроме того, в других подобных случаях тезаурус Роже - ваш друг. Я всегда держу копию поблизости.

0 голосов
/ 21 января 2010

top? top_level

0 голосов
/ 21 января 2010

global - это ключевое слово, а не встроенное. 'globals' не является ключевым словом, но - это встроенная функция. Это может быть назначено, но это плохая практика. Проверщики кода, такие как pylint и pychecker , могут перехватывать эти случайные назначения. Как насчет config?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...