Skip to content

gitYuZui/Python-PluginFramework

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 

Repository files navigation

Python-PluginFramework

这是一个轻量级的模块化开发框架

更新时间:2019/7/17

版本

python3+

功能

  • 动态加载目录里的模块文件
  • 通过代码加载模块

框架项目结构

  • Project
    • main.py
    • Plugin
      • pluginmanager.py
      • MyPlugin1
        • MyPlugin1.py
        • Resources
          • nesting.py
      • MyPlugin2
        • MyPlugin2.py
        • Resources
          • nesting.py
      • ...

函数表:

函数名 参数 返回值 注释
addPathPlugin string [successPath,fail] 载入所在目录模块
addPlugin dict Null 载入实例化对象
getAllPlugin Null dict 获取模块dict集合
delPlugin string bool 删除指定模块
hasPlugin string bool 查看模块是否存在

使用方法:

  • 动态加载目录方式:

    • 将 pluginmanager.py 导入项目中,建立好相关文件夹后把模块文件放入其中。

    • 模块文件名与文件夹名一致,并在要在模块文件内编写一个 class 名为模块名

    • 例如: PathTest 模块。

    目录结构:
    • Project
      • main.py
      • TestPlugin
        • pluginmanager.py
        • PathTest
          • PathTest.py
          • Resources
            • logo.jpg
            • my.mp3
    main.py 代码:
    #! /usr/bin/python3
    # -*- coding:utf-8 -*-
    
    from TestPlugin.pluginmanager import pluginManager                #框架模块
    from TestPlugin.pluginmanager import pluginError                  #框架异常处理模块
    
    MyPlugin = pluginManager()                                        #实例化框架模块
    successPath,failPath =  MyPlugin.addPathPlugin("TestPlugin")      #执行加载模块目录,返回 [成功目录,失败目录及原因]
    print("加载成功模块目录: " +  str(successPath) )
    print("加载失败模块目录: " +  failPath.dir + "失败原因:" +  failPath.content)
    try:
       MyPlugin.test.Fun()                                           #调用模块里的方法
    except pluginError as Error:                                     #没有此模块
       print(Error)
    except AttributeError as Error:                                   #此模块里没有所调用的方法
       print(str(Error))
    text.py 代码:
    class test:
       def __init__(self):
           print(" test 初始化 ")
       def Fun(self):
           print("hello World")
           
    if __name__ != "__main__":
        print("我test被加载了")
  • 通过代码加载模块方式:

    • 实例化对象,并定义模块名称与对象放到 dict 类型里

    • 例如: cordPlugin 模块

    目录结构:
    • Project
      • main.py

      • cordPlugin.py

      • pluginmanager.py

    main 代码:
    #! /usr/bin/python3
    # -*- coding:utf-8 -*-
    from Plugin.pluginmanager import pluginManager 
    from Plugin.pluginmanager import pluginError 
    import cordPlugin
    
    if __name__ == "__main__":
       MyPlugin = pluginManager()
       cordPlugin1 = cordPlugin.staticPlugin('我是模块1')                     #实例化第一个模块
       cordPlugin2 = cordPlugin.staticPlugin('我是模块2')                     #实例化第二个模块
       
       MyPlugin.addPlugin( **{"cord1":cordPlugin1,"cord2":cordPlugin2 } ) #将模块的实例化加载到框架里
       try:
          MyPlugin.cord1.test()                                          #调用模块里的方法
          MyPlugin.cord2.test()
       except pluginError as Error:                                      #没有此模块
           print(Error)
       except AttributeError as Error:                                   #此模块里没有所调用的方法
           print(str(Error))
    cordPlugin 代码:
    class cordPlugin:
        def __init__(self,name):
            self.name = name
    
        def test(self):
            print("我是用代码导入的模块 %s" % self.name)

注意事项

模块目录及文件请勿以.或 _ 开头。否则此模块将直接跳过不载入

结束语

欢迎大佬们来技术交流 QQ:1170941265

About

python 模块化框架

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages