2015-05-22 4 views
1

У меня 3 файла.Глобальная переменная не обновляется в python

globalVar.py

global m_pTest 
m_pTest = None 

FileOne.py

import globalVar 
import fileTwo 

m_pTest = Class.getOutput() # Value is assigne 
fileTwo.fun() 
#Do anything 

fileTwo.py

import globalVar 

def fun(): 
    intVal = m_pTest.getInt() # int value from m_pTest object 
    print intVal 

Это мой пример короткой программы, когда я запускаю это дает ошибку в fileTwo. py in fun()

AttributeError: 'NoneType' object has no attribute 'getInt' 

Может кто-нибудь объяснить, что не так в этом коде? Спасибо!

+0

возможно дубликат [Python глобальная переменная невменяемости] (http://stackoverflow.com/questions/3119287/python-global-variable-insanity) –

+1

Не используйте глобалам. –

+0

@brunodesthuilliers есть ли какой-либо вариант, чтобы избежать глобального я использую так много глобальных переменных –

ответ

4

global m_pTest не делает переменную магически глобальной; вместо этого он устанавливает имя m_pTest в текущей области для ссылки на глобальную переменную (из внешней области). Поэтому размещение его в globalVar.py действительно ничего не значит.

Если вы хотите импортировать только переменную, можно использовать следующее:

from globalVar import m_pTest 

Однако при установке m_pTest на другое значение, не влияет на исходный объект, который был создан в globalVar.py так изменение не встречается в другом месте.

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

import globalVar 

# reading 
print(globalVar.m_pTest) 

# setting 
globalVar.m_pTest = 123 
+0

Тогда как я могу получить значение в файлеTwo.py, которые установлены в файле File.ne.py –

3

Почему с помощью глобальной вообще?

# FileOne.py 
import fileTwo 

value = Class.getOutput() 
fileTwo.fun(value) 
#Do anything 

# fileTwo.py 
def fun(value): 
    intVal = value.getInt() 
    print intVal