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

问题描述 投票:0回答:1

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

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:我所有的类都在单独的文件中声明

这是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类(它包含mixin):

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
python python-3.x python-import pep8
1个回答
0
投票

嗯,到目前为止,我已经找到了解决方法:我将from Init.Loaders.InitPreLoader import InitPreLoader移到了单独的文件中,并在其中调用了InitPreLoader.load()。但是我不喜欢这种解决方案,因为我的PyCharm IDE将其突出显示为未使用的导入:

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

也许可以改进此解决方案?还是存在另一个(更优雅的)隔离?

© www.soinside.com 2019 - 2024. All rights reserved.