Обратитесь к sqlContext как к глобальной переменной [duplicate]

Итак, у меня есть два разных файла, несколько похожий на это:

file1.py

from file2 import *
foo = "bar";
test = SomeClass();

file2.py

class SomeClass :
    def __init__ (self):
        global foo;
        print foo;

Однако я не могу показаться чтобы file2 распознал переменные из файла1, даже если он уже импортирован в файл1. Было бы очень полезно, если это возможно в некотором роде.

19
задан 4 August 2010 в 01:28

5 ответов

Когда вы пишете

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 *), хотя я бы предложил тщательно подумать о том, действительно ли вам нужно это делать. Не очень часто бывает, что изменение переменных одного модуля из другого модуля действительно оправдано.

9
ответ дан 15 August 2018 в 15:40

Все приведенные ответы неверны. Невозможно глобализовать переменную внутри функции в отдельном файле.

0
ответ дан 15 August 2018 в 15:40

Просто поместите свои глобалы в файл, который вы импортируете.

0
ответ дан 15 August 2018 в 15:40

global является немного неправильным в Python, module_namespace будет более описательным.

Полностью квалифицированное имя foo - file1.foo, а глобальное утверждение лучше избегать, поскольку обычно есть лучшие способы сделать то, что вы хотите сделать. (Я не могу сказать, что вы хотите сделать из своего примера игрушек.)

3
ответ дан 15 August 2018 в 15:40

from file2 import * создает копии. Вы хотите сделать это:

import file2
print file2.foo
print file2.SomeClass()
8
ответ дан 15 August 2018 в 15:40

Другие вопросы по тегам:

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