Пространство имен Python и глобальная переменная между файлами - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть 2 разных файла.Первый, определяет много класса:

# File 1:

class Class1:

class Class2:

#...

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

# File 1:

class Class1:
    def __init__(self, var1):
        global glob_variable_1

        # Other stuff
class Class2:

#...

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

# File 2
from File1 import Class1, Class2

if __name__ == '__main__':
    global glob_variable_1

    glob_variable_1 = 10
    # Other stuff
    Class1(var1)

Я получаю ошибку NameError: name 'glob_variable_1' is not defined..Я полагаю, это проблема пространства имен и области видимости, но я не совсем понимаю, как это работает.Может ли кто-нибудь помочь мне?Спасибо.

1 Ответ

0 голосов
/ 13 февраля 2019

У вас есть два glob_variable_1 имени, по одному в каждом пространстве имен, и вы должны решить, какое из них использовать:

# File 1:

# defined here, outside the class
glob_variable_1 = None   

class Class1:
    def __init__(self, var1):
        global glob_variable_1
        glob_variable_1 = 42

        # Other stuff
class Class2:
    pass

с:

# File 2
from File1 import Class1, Class2
import File1

if __name__ == '__main__':
    global glob_variable_1
    # Other stuff
    var1 = 1234
    obj = Class1(var1)

    glob_variable_1 = 666
    print(glob_variable_1)
    print(File1.glob_variable_1)

Дает:

666
42       

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

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