我是靠谱客的博主 负责眼神,最近开发中收集的这篇文章主要介绍Python插件化编程,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

      • 插件化开发
        • 动态导入
        • 内建函数__import __() 动态导入
        • importlib.import_module() 动态导入
      • 插件化编程技术
        • 依赖的技术

插件化开发

动态导入

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

内建函数__import __() 动态导入

  • __import __(name, globals=None, locals=None, fromlist=(), level=0),name,模块名
  • import语句本质上就是调用这个函数。sys = import(‘sys’)等价于 import sys
# testa
class A:
def show(self):
print('cls A ==>',__name__)
# testb.py
mod = __import__('testa')
# 等价于 import testa as mod
cls = getattr(mod,'A')
#获取模块中的类,A
cls().show()
#实例调用show方法
----------------------------------------------------------
cls A ==> testa

importlib.import_module() 动态导入

importlib. import_module(name,package=None)

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

# testa
class A:
def show(self):
print('cls A ==>',__name__)
# testb.py
import importlib
def plugin_load(plugin_name:str, sep=":"): #把拿到的字符串用":"分割成3部分
m,_,c = plugin_name.partition(sep)
#前面部分的m等效为导入的模块,c为模块中的类
mod = importlib.import_module(m)
cls = getattr(mod,c)
return cls()
#返回实例
if __name__== '__main__':
a = plugin_load('testa:A')
# a等于调用函数plugin_load()函数返回的实例
a.show()
# 实例调用模块中类的方法
-------------------------------------------------------------------
cls A ==> testa

插件化编程技术

依赖的技术

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

最后

以上就是负责眼神为你收集整理的Python插件化编程的全部内容,希望文章能够帮你解决Python插件化编程所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(74)

评论列表共有 0 条评论

立即
投稿
返回
顶部