python做软件插件_Python-插件化开发

1、动态导入:

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

2、内建函数__import__()

def __import__(name, globals=None, locals=None, fromlist=(), level=0):

name:模块名

import语句本质上就是调用这个函数,但是不鼓励直接使用它,建议使用importlib.import_module()。

sys = __import__('sys')等价于import sys

测试 直接调用:

1243334-20181010091915831-1903346678.png

测试 可以动态交互加载模块:

1 if __name__ == '__main__':2 name = input('>>>')3 mod = __import__(name) #import tt

4 cls = getattr(mod, 'A')5 cls().showme()

2、importlib.import_module()

1 importimportlib2 importlib.import_module(name, package=None)

支持绝对导入 和 相对导入,如果是相对导入,package必须设置。

测试:插件化编程的核心代码。

1243334-20181010093513470-1644444671.png

相对导入:

1243334-20181010101303100-700177838.png

3、插件化编程技术:

依赖的技术:

反射:运行时获取类型的信息,可以动态维护类型数据。

动态import:推荐使用importlib 模块,实现动态import模块的能力。

多线程:可以开启一个线程,等待用户输入,从而加载指定名称的模块。

加载的时机:

1、程序启动时:

像pycharm 这样的工具,需要很多组建,这些组件也可能是插件,启动的时候,扫描固定的目录,加载插件

2、程序运行中:

程序运行过程中,接受用户指令或请求,启动相应的插件。

两种当时各有利弊,如果插件过多,或导致程序启动很慢,如果用户需要时加载,如果产检太大或者依赖多,插件也会启动慢

所以先加载必须的,常用的插件,其他插件使用时,在动态载入。

4、应用:

软件的设计不可能完美,或者在某些功能上,不可能做的专业,需要专业的客户增强。如PS

1243334-20181010101910139-1393687484.png

5、接口和插件的区别:

接口往往是暴露出来的功能,例如模块提供的函数或方法,加载模块后嗲用这些函数完成功能,

接口也是一种规范,它约定了必须是此案的功能(必须提供某名称的函数), 但是不关心怎么实现这个功能。

插件是把模块加载到系统中,运行它,增强当前系统功能,或者提供系统不具备的功能,往往插件技术应用在框架设计中,系统本身设计简单化,轻量级,实现基本功能后,其他功能通过插件加入进来,方便扩展。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值