如何在 Python 中导入前正确调用预加载器函数?

How to correctly call preloader function before imports in Python?

我有配置数据应该在另一个代码之前加载(因为另一个代码使用它)。 所以,现在我看到唯一的方法是在 rest 导入之前调用顶部的函数:

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?

P.S。如果我需要分享更多代码,请告诉我

UPD:我的所有 classes 在单独的文件中声明

这是预加载器:

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

所有 classes(AbstractRegistry 除外)的父级是 AbstractBase class(它包含 mixin):

from abc import ABC

from Config.Mixins.ConfigurableMixin import ConfigurableMixin


class AbstractBase(ConfigurableMixin, ABC):
    pass

此混音适用于 InitRegistry 中的 main_config。 此外,在调用 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

好吧,现在我找到了解决方案:我将 from Init.Loaders.InitPreLoader import InitPreLoader 移动到单独的文件并在那里调用 InitPreLoader.load()。但我不喜欢这个解决方案,因为我的 PyCharm IDE 将其突出显示为未使用的导入:

import Init.Init.preloader
from World.WorldManager import WorldManager
# ...

也许可以改进这个解决方案?或者可能存在另一个(更优雅的)独奏?