Как обратиться к переменной из другого модуля в PYTHON 3
У меня есть два файла: main.py и sub.py
Мне надо завести в main переменную, которую я смогу изменять в sub. Проблема в том, что sub импортируется в main и при добавлении строчки from main import charts (где charts - нужная мне константа) получается ошибка, как я понимаю, связанная с зацикленным импортом.
Я видел похожий вопрос тут Импорт функций из другого файла pytnon, но там всего лишь один ответ, который мне кажется неправильным. Хотелось бы узнать, существуют ли какие-то еще варианты выхода из данной ситуации
UPD.
main.py
from sub.py import MyClass
charts = 10
if __name__ == "__main__":
my_example = MyClass()
my_example.func()
sub.py
class MyClass:
def func(self):
// тут надо увеличить charts из main и вывести его
Ответы (2 шт):
main.py
#from sub.py import MyClass
from sub import MyClass
charts = 10
print(f'main.py: charts = {charts}')
if __name__ == "__main__":
my_example = MyClass()
my_example.func(charts)
sub.py
class MyClass:
def func(self, charts):
# тут надо увеличить charts из main и вывести его
charts += 1
print(f'sub.py: charts = {charts}')
1) Можно создать глобальную переменную
#settings.py
def init():
global charts
charts = 10
#main.py
import settings
settings.init() #создаем этот вызов один раз при создании программы
print(settings.charts)
#sub.py
import settings # везде где они нужны делаем импорт
class MyClass:
def func(self, charts):
settings.charts += 1
2) Можно создать используя @property и .setter, и сразу при обновлении переменной выполнять метод
#settings.py
class Global_Settings:
def __init__(self):
self._charts = 10
@property
def charts(self):
print('Произошел запрос переменной')
return self._charts
@charts.setter
def charts(self, value):
print('Произошло изменение переменной')
self._charts = value
settings = Global_Settings()
#sub.py
from settings import settings
class MyClass:
def func(self, charts):
settings.charts += 1
#main.py
from settings import settings
print(settings.charts) #выводим