python插件化开发

动态导入

运行时,根据用户需求(提供字符串),找到模块的资源动态加载起来。

  • 内建函数__import__()
    __import __(name,globals=None,locals=None,fromlist=(),level=0)
    name,模块名
    import语句本质上就是调用这个函数,建议不要使用,建议使用importlib.import_module()
sys=__import__('sys)等价于import sys
#在 xyz.py
class A:
    def show(self0):
        print('123')
#在 主程序模块
if __name__=="__main__":
    mod=__import__('xyz')
    cls=getattr(mod,'A')
    cls().show()

在这里插入图片描述

  • importlib.import_module()
    importlib.import_module(name,package=None)
    支持绝对导入和相对导入,如果是相对导入,package必须设置
#xyz.py
class A:
    def show(self0):
        print('123')
# 主程序模块
import importlib
def plugin(name:str,sep=':'):
    m , _, c=name.partition(sep)
    mod=importlib.import_module(m)
    cls=getattr(mod,c)
    return cls()
if __name__=='__main__':
    a=plugin('xyz:A')
    a.show()

在这里插入图片描述

插件化编程技术

依赖的技术
反射:运行时获取类型的信息,可以动态维护类型数据
动态import:推荐使用importlib模块,实现动态import模块的能力
多线程:可以开启一个线程,等待用户输入,从而加载指定名称的模块。

加载的时机
  • 程序启动时,像pycharm这样的工具,需要很多的组件,这些组件也可能是插件,启动的时候扫描规定的目录,加载插件
  • 程序运行中,程序运行过程中,接受用户指令或请求,启动相应的插件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值