Итак, у меня есть два разных файла, несколько похожий на это:
file1.py
from file2 import *
foo = "bar";
test = SomeClass();
file2.py
class SomeClass :
def __init__ (self):
global foo;
print foo;
Однако я не могу показаться чтобы file2 распознал переменные из файла1, даже если он уже импортирован в файл1. Было бы очень полезно, если это возможно в некотором роде.
Когда вы пишете
from file2 import *
, он фактически копирует имена, определенные в file2, в пространство имен file1. Поэтому, если вы переадресовываете эти имена в file1, например, путем записи
foo = "bar"
, это сделает только это изменение в file1, а не file2. Обратите внимание, что если вы изменили копии в foo, скажем, выполнив
foo.blah = "bar"
, то это изменение будет отражено в file2, поскольку вы изменяете существующий объект, на который ссылается имя foo, не заменяя его новым объектом.
Вы можете получить желаемый эффект, выполнив это в file1.py:
import file2
file2.foo = "bar"
test = SomeClass()
(обратите внимание, что вы должны удалить from foo import *), хотя я бы предложил тщательно подумать о том, действительно ли вам нужно это делать. Не очень часто бывает, что изменение переменных одного модуля из другого модуля действительно оправдано.
Все приведенные ответы неверны. Невозможно глобализовать переменную внутри функции в отдельном файле.
Просто поместите свои глобалы в файл, который вы импортируете.
global является немного неправильным в Python, module_namespace будет более описательным.
Полностью квалифицированное имя foo - file1.foo, а глобальное утверждение лучше избегать, поскольку обычно есть лучшие способы сделать то, что вы хотите сделать. (Я не могу сказать, что вы хотите сделать из своего примера игрушек.)
from file2 import * создает копии. Вы хотите сделать это:
import file2
print file2.foo
print file2.SomeClass()