python项目分层模块导入处理优化 (通过字符串名导入模块)
案例:chatbot项目
实践:构造一个新的逻辑处理器
构建机器人层:
1 | bot = ChatBot( |
chatterbot.py ChatBot类:
1 | logic_adapters = kwargs.get('logic_adapters', [ |
导入模块
1 | # 将构造机器人参数中的字符串转为处理类对象(此为导入选用的逻辑处理器并赋值给chatbot类的logic属性) |
进入add_adapter方法:
1 | def add_adapter(self, adapter, **kwargs): |
进入utils.validate_adapter_class方法:
1 | from .adapters import Adapter |
进入import_module方法:
1 | def import_module(dotted_path): |
importlib.import_module
手动导入名字为字符串给出的一个模块或者包的一部分getattr(module, module_parts[-1])
查看这个包是否包含module_parts[-1]
这个属性值。
因此项目logic包下模块导入被限制(因) 进入logic包下的init.py(新增的逻辑处理器添入这个属性列表即可)
1 | from .match_with_default import BestMatchWithDefault |