zoukankan      html  css  js  c++  java
  • Python的插件化开发概述

                Python的插件化开发概述

                               作者:尹正杰

    版权声明:原创作品,谢绝转载!否则将追究法律责任。

    一.插件化开发

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

    1>.内建函数“__import__() ”

    1 #!/usr/bin/env python
    2 #_*_conding:utf-8_*_
    3 #@author :yinzhengjie
    4 #blog:http://www.cnblogs.com/yinzhengjie
    5 
    6 class A:
    7     def showme(self):
    8         print("I am A")
    test01.py文件内容
    1 #!/usr/bin/env python
    2 #_*_conding:utf-8_*_
    3 #@author :yinzhengjie
    4 #blog:http://www.cnblogs.com/yinzhengjie
    5 
    6 if __name__ == '__main__':
    7     mod = __import__("test01")      #import语句本质上就是调用这个函数。但是不鼓励直接使用它。建议使用"importlib.import_module()"
    8     cls = getattr(mod,"A")
    9     cls().showme()

    2>.mportlib.import_module() 

     1 #!/usr/bin/env python
     2 #_*_conding:utf-8_*_
     3 #@author :yinzhengjie
     4 #blog:http://www.cnblogs.com/yinzhengjie
     5 
     6 import importlib
     7 
     8 def plugin_load(plugin_name:str, sep=":"):
     9     m, _, c = plugin_name.partition(sep)
    10     mod = importlib.import_module(m)            #支持绝对导入和相对导入,如果是相对导入,package必须设置。
    11     cls = getattr(mod, c)
    12     return cls()
    13 
    14 if __name__ == '__main__':                    #装载插件
    15     a = plugin_load('test01:A')
    16     a.showme()

    二.插件化编程技术 

    1>.依赖的技术 

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

    2>.加载的时机 

    模块或插件什么时候加载合适?程序启动的时候,还是程序运行中?
      程序启动时: 
        像pycharm这样的工具,需要很多组件,这些组件也可能是插件,启动的时候扫描固定的目录, 加载插件。
      程序运行中:
        程序运行过程中,接受用户指令或请求,启动相应的插件
      两种方式各有利弊,如果插件过多,会导致程序启动很慢,如果用户需要时再加载,如果插件太大或者依赖多,插件也会启动慢。所以先加载必须的、常用的插件,其他插件使用时,再动态载入。

    3>.应用 

      软件的设计不可能尽善尽美,或者在某些功能上,不可能做的专业,需要专业的客户自己增强。比如Photoshop的滤镜插件。
    
      Notepad
    ++,它只需要做好一个文本编辑器就可以了,其它增强功能都通过插件的方式提供。 如:拼写检查、HTML预览、正则插件等。 要定义规范,定义插件从哪里加载、如何加载、必须实现的功能等。
      插件是把模块加载到系统中,运行它,增强当前系统功能,或者提供系统不具备的功能,往往插件技术应用在框架设计中。系统本身设计简单化、轻量级,实现基本功能后,其他功能通过插件加入进来,方便扩展。
  • 相关阅读:
    Android应用增量更新
    corner2
    UIProject
    Argo
    flower-recognition
    Android-Chat-Widget
    leanchat-android
    Beautyacticle
    XianBicycle
    完整性约束(章节摘要)
  • 原文地址:https://www.cnblogs.com/yinzhengjie/p/11817377.html
Copyright © 2011-2022 走看看