Как сделать переменную перекрестного модуля?

В Java все находится в форме класса.

Если вы хотите использовать любой объект, тогда у вас есть две фазы:

  1. Объявить
  2. Инициализация

Пример:

  • Объявление: Object a;
  • Инициализация: a=new Object();

То же самое для концепции массива

  • Объявление: Item i[]=new Item[5];
  • Инициализация: i[0]=new Item();

Если вы не дают секцию инициализации, тогда возникает NullpointerException.

117
задан codeforester 24 September 2018 в 22:37
поделиться

6 ответов

Я не подтверждаю это решение всегда, форму или форму. Но если Вы добавите переменную к __builtin__ модуль, это будет доступно, как будто глобальное от любого другого модуля, который включает __builtin__ - который является всеми ими по умолчанию.

a.py содержит

print foo

, b.py содержит

import __builtin__
__builtin__.foo = 1
import a

, результат состоит в том, что "1" печатается.

Редактирование: __builtin__ модуль доступен как локальный символ __builtins__ - это - причина несоответствия между двумя из этих ответов. Также обратите внимание, что __builtin__ был переименован к builtins в python3.

110
ответ дан Community 24 November 2019 в 02:04
поделиться

Определите модуль (назовите его "globalbaz"), и определите переменные в нем. Все модули с помощью этого "псевдоглобального" должны импортировать "globalbaz" модуль и относиться к нему с помощью "globalbaz.var_name"

, Это работает независимо от места изменения, можно заменить переменную прежде или после импорта. Импортированный модуль будет использовать последнее значение. (Я протестировал это в игрушечном примере)

Для разъяснения, globalbaz.py взгляды точно так же, как это:

var_name = "my_useful_string"
23
ответ дан hayalci 24 November 2019 в 02:04
поделиться

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

a.py:

var = 1

b.py:

import a
print a.var
import c
print a.var

c.py:

import a
a.var = 2

Тест:

$ python b.py
# -> 1 2

Реальный пример: global_settings.py Django (хотя в приложениях Django настройки используются путем импорта объект django.conf.settings ).

153
ответ дан Sadly Not 24 November 2019 в 02:04
поделиться

Глобальные переменные обычно являются плохой идеей, но можно сделать это путем присвоения __builtins__:

__builtins__.foo = 'something'
print foo

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

# my_globals.py
foo = 'something'

Тогда можно использовать это отовсюду также:

import my_globals
print my_globals.foo

Используя модули вместо того, чтобы изменить __builtins__ обычно более чистый способ сделать globals этого вида.

7
ответ дан spiv 24 November 2019 в 02:04
поделиться

Это походит на изменение __builtin__ пространство имен. Сделать это:

import __builtin__
__builtin__.foo = 'some-value'

не используют __builtins__ непосредственно (заметьте дополнительный "s") - по-видимому, это может быть словарем или модулем. Благодаря О¤О–О©О¤О–О™ОџОҐ для указания на это больше может быть найдено здесь .

Теперь foo доступно для использования везде.

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

Присвоение ему должно быть сделано как выше, просто установка foo = 'some-other-value' только установит его в текущем пространстве имен.

2
ответ дан awatts 24 November 2019 в 02:04
поделиться

Вы можете передавать глобальные значения одного модуля другому:

В модуле A:

import module_b
my_var=2
module_b.do_something_with_my_globals(globals())
print my_var

В модуле B:

def do_something_with_my_globals(glob): # glob is simply a dict.
    glob["my_var"]=3
9
ответ дан 24 November 2019 в 02:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: