2010-02-19 3 views
2

Я исследовал, что область глобальных переменных в python ограничена модулем. Но мне нужно, чтобы область была глобальной среди разных модулей. Что-то подобное существует? Я играл около __builtin__, но не повезло.Как иметь глобальные переменные среди разных модулей в Python

благодарит заранее!

ответ

6

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

В модуле foo:

joe = 5 

В модуле bar:

from foo import joe 
    print joe 

Обратите внимание, что это не рекомендуется, хотя. Гораздо лучше скрыть доступ к переменным модуля с помощью функций.

+2

Даже лучше не сохранять изменчивое состояние в глобальных переменных вообще, а использовать классы. –

+0

@Eli Bendersky, что вы подразумеваете под словом «Гораздо лучше скрыть доступ к переменным модуля с помощью функций»? @ Майк Грэм, что вы подразумеваете под «использованием классов»? Как вы это делаете, чтобы получить то, что он хочет? – LWZ

+1

@LWZ: Я имел в виду, что когда модуль позволяет другим модулям напрямую обращаться к своим данным, это может привести к трудным для отладки проблемам. Если по какой-либо причине необходим полный доступ к глобальным данным, должны быть предусмотрены как минимум функции get/set. Эти функции значительно облегчают изменение кода позже (например, заменяют глобальные данные чем-то другим) и отлаживают его, если возникают проблемы. –

0

Области, находящиеся за пределами локальной, должны быть записаны посредством ссылки на область действия или после директивы global или nonlocal (3.x +).

2

Python не поддерживает глобальные общие для нескольких модулей: это функция. Код, который неявно изменяет используемые переменные, путается и недостижимо. Решение real состоит в том, чтобы инкапсулировать все состояние внутри класса и передать его экземпляр всем, что должно его изменить. Это может сделать код более понятным, более удобным для обслуживания, более тестируемым, более модульным и более затратным.