标签:__ 插件 name show python 开发 import importlib
动态导入
运行时,根据用户需求(提供字符串),找到模块的资源动态加载起来。
- 内建函数__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这样的工具,需要很多的组件,这些组件也可能是插件,启动的时候扫描规定的目录,加载插件
- 程序运行中,程序运行过程中,接受用户指令或请求,启动相应的插件。
标签:__,插件,name,show,python,开发,import,importlib 来源: https://blog.csdn.net/qq_36883141/article/details/90731318
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。