У меня есть данные конфигурации, которые должны быть загружены перед другим кодом (потому что другой код использует его). Итак, пока я вижу, что единственный способ сделать это - вызвать функцию вверху, прежде чем импортировать остальные:
from Init.Loaders.InitPreLoader import InitPreLoader
# this is my config loader
InitPreLoader.load()
from World.WorldManager import WorldManager
from Init.Loaders.InitLoader import InitLoader
from Init.Registry.InitRegistry import InitRegistry
from Utils.Debug import Logger
# ...
if __name__ == '__main__':
# ...
InitLoader.load()
Можно ли сделать это более элегантным способом и избежать нарушения pep8?
PS Если мне нужно поделиться большим кодом, пожалуйста, дайте мне знать
UPD : все мои классы объявлены в отдельных файлах
Это PreLoader:
from Typings.Abstract.AbstractLoader import AbstractLoader
from Init.Registry.InitRegistry import InitRegistry
from Config.Init.configs import main_config
class InitPreLoader(AbstractLoader):
@staticmethod
def load(**kwargs):
InitRegistry.main_config = main_config
Это Реестр (где я храню все свои инициализированные данные):
from Typings.Abstract.AbstractRegistry import AbstractRegistry
class InitRegistry(AbstractRegistry):
main_config = None
login_server = None
world_server = None
world_observer = None
identifier_region_map = None
region_octree_map = None
Родителем всех классов (кроме AbstractRegistry
) является класс AbstractBase
(содержит миксин):
from abc import ABC
from Config.Mixins.ConfigurableMixin import ConfigurableMixin
class AbstractBase(ConfigurableMixin, ABC):
pass
Этот миксин работает с main_config
с InitRegistry
. Кроме того, после вызова PreLoader load
я загружаю остальные данные с помощью InitLoader.load()
(см. Первый снимок кода):
from Typings.Abstract.AbstractLoader import AbstractLoader
from Init.Registry.InitRegistry import InitRegistry
from Server.Init.servers import login_server, world_server
from World.Observer.Init.observers import world_observer
from World.Region.Init.regions import identifier_region_map, region_octree_map
class InitLoader(AbstractLoader):
@staticmethod
def load(**kwargs):
InitRegistry.login_server = login_server
InitRegistry.world_server = world_server
InitRegistry.world_observer = world_observer
InitRegistry.identifier_region_map = identifier_region_map
InitRegistry.region_octree_map = region_octree_map