zoukankan      html  css  js  c++  java
  • Python-插件化开发

    1、动态导入:

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

    2、内建函数__import__()

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

       name:模块名

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

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

        测试  直接调用:

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

    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 import importlib
    2 importlib.import_module(name, package=None)

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

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

     

      相对导入:

         

    3、插件化编程技术:

      依赖的技术:

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

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

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

      加载的时机:

        1、程序启动时:

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

        2、程序运行中:

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

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

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

     

    4、应用:

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

        

    5、接口和插件的区别:

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

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

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

    为什么要坚持,想一想当初!
  • 相关阅读:
    使用DOM4J生成XML文档的分析和简单实例
    察看数据库索引使用情况
    SQL Server分布式事务模板
    SQLBulkCopy 性能统计
    个人技术发展思路
    在SQLServer 中利用OUTPUT 语句实现删除数据的同时备份数据
    对一段SQL进行语法检查
    LoD 迪米特法则
    开发心得
    实现一个服务的基础结构和管理本地服务和WCF服务的管理器
  • 原文地址:https://www.cnblogs.com/JerryZao/p/9764875.html
Copyright © 2011-2022 走看看