Есть 3 файла:
api.py, users.py, posts.py
Все имена вымышленные, но отражают смысл всей этой задачи. Так вот. В файле api.py есть класс settings который обновляется по команде пользователя:
class settings:
def update(self, sql): self.settings = sql.get_settings_from_db()
settings = settings()
settings.update(sql)
Понятно, файл api.py однажды импортирован в main.py и в нём инициализированы все необходимые переменные, в нашем случае settings.
Теперь, если добавить ещё пару классов, которые используют данные из класса settings, то получится что-то такое:
class settings:
def update(self, sql): self.settings = sql.get_settings_from_db
class users:
def say_id(self):
print(settings.settings.id)
class posts:
def do(self):
print(settings.settings.posts)
#code here
settings = settings()
А теперь, чтобы код стал красивым разобьём всю эту красоту по файлам:
api.py
from classes.users import users
from classes.posts import posts
class settings:
def update(self, sql): self.settings = sql.get_settings_from_db
settings = settings()
users = users()
posts = posts()
users.say_id()
users.py
class users:
def say_id(self):
print(settings.settings.id)
posts.py
class posts:
def do(self):
print(settings.settings.posts)
#code here
При запуске api.py начинаются проблемы (и самое интересное): класс users не видит инициализированную переменную settings в api.py, значит у нас есть тривиальные пути:
1. Передать settings с вызовом функции:
users.say_id(settings)
Весьма просто и, по-моему мнению, не лучший вариант
2. Из файла users.py сделать импорт родительского модуля: import __main__ и потом уже __main__.settings().update()
Но так как settings.update() занимает ресурсы: подключается к бд и тянет инфу, и если вызовов users.say_id несколько тысяч в секунду, то сами понимаете, 1000 раз в секунду обновлять настройки, которые могут не меняться месяцами (глупо).
Если резюмировать
Нужно как-то объединить всю эту красоту под одним пространством имён, при этом, чтобы классы были разбиты на файлы и в итоге импортировались в один. Надеюсь на вас.