importlib实现了__import__()方法

方法 描述
importlib.__import__(name, globals=None, locals=None, fromlist=(), level=0) 内置__import__()的实现
importlib.import_module(name, package=None) 导入一个module
importlib.find_loader(name, path=None) Find the loader for a module, optionally within the specified path. If the module is in sys.modules, then sys.modules[name].loader is returned
importlib.invalidate_caches() 清除缓存
importlib.reload(module) 重新载入

例子:

--testpack--__init__--testmod.py
test.py

testmod.py

class Person(object):def __init__(self, name):self.name = namedef say(self):print(f"hello {self.name}")

test.py

# 常规的调用方法
# import testpack.testmod
# p = testmod.Person("wang")
# p.say()# 反射方法,导入模块
# import importlib
# testmod = importlib.import_module("testpack.testmod") # 反射导入模块(.py)
# p = testmod.Person('wang')
# p.say()# 反射方法,导入模块和类
import importlib
testmod = importlib.import_module("testpack.testmod") # 反射导入模块(.py)
Person = getattr(testmod,"Person") # 反射导入模块中的类
p = Person("wang")
p.say()

例子

app.py

from utils import send_msgs
send_msgs('.....')

settings.py

MSG_LIST = ["utils.email.Email","utils.msg.Msg","utils.wechat.WeChat",
]

utils.__init__.py

import settings
import importlibdef send_msgs(msg):"""导入设置里配置的功能:param msg::return:"""for path in settings.MSG_LIST:m,c = path.rsplit('.',maxsplit=1)  # 切分配置里的模块路径(注意不是文件路径)md = importlib.import_module(m)  # 导入模块,类似于java中的反射机制obj = getattr(md,c)()  # 获得模块的里的类,后面加()实例化obj.send(msg)  # 调用类的方法

base.py


class Base(object):def send(self,msg):raise NotImplementedError('...') # 这样写相当于java中的接口

msg.py

from .base import Baseclass Msg(Base):def send(self, msg):print("发送短信"+msg)

email.py

from .base import Base
class Email(Base):def send(self,msg):print("发送邮件"+msg)

wechat.py

from .base import Base
class WeChat(Base):def send(self,msg):print("发微信"+msg)

Python importlib相关推荐

  1. Python Importlib.import_module动态导入模块

    我的环境是:os系统 python 3.7 在学这个模块之前我们先获取下该模块的路径如下: >>>import module >>>print(module.__f ...

  2. Python Importlib模块与__import__详解

    阅读目录 Importlib模块与__import__都可以通过过字符串来导入另外一个模块,但在用法上和本质上都有很大的不同. 以一个例子为证: 以下为我的工程目录结构: lib/test.py: - ...

  3. python importlib bootstrap_python - importlib._bootstrap和Python解释器初始化 - SO中文参考 - www.soinside.com...

    CPython的解释模块导入系统是用Python编写本身和importlib._bootstrap被初始化.它的来源可以importlib/_bootstrap.py可以看到,但它不是从那里加载.相反 ...

  4. python importlib_学习python importlib的导入机制

    1. Importer协议 协议涉及两个对象: Finder 和 loader 1. Finder 实现了方法: finder.find_module(fullname, path=None) 返回一 ...

  5. python importlib qpython_Python的import机制

    模块与包 在了解 import 之前,有两个概念必须提一下: 模块: 一个 .py 文件就是一个模块(module) 包: __init__.py 文件所在目录就是包(package) 当然,这只是极 ...

  6. python importlib qpython_Python imports指南:Python的导入有更好的理解

    声明:如果你每天写Python,你会发现这篇文章中没有新东西. 这是专为那些像运维人员等偶尔使用Python的人以及那些忘记/误用python import的人写的. 尽管如此,代码是用Python ...

  7. python importlib

    api 文档 importlib.import_module(name, package=None) Import a module. The name argument specifies what ...

  8. python之getattr()函数和importlib库的使用

    1.getattr()介绍 2.如果对象obj是类对象 3.如果对象obj是模块对象 4.如果查看对象obj的属性? 5.总结 6.importlib的使用 之所以使用到getattr()函数,因为我 ...

  9. python最新版本是多少(python最新版)

    python所有版本发布时间? Python的所有版本发布时间如下: Python3.3.2发布于2013年5月15日. Python3.2.5发布于2013年5月15日. Python3.1.5发布 ...

最新文章

  1. hook 驱动 截屏
  2. Java集合:Hashtable源码分析
  3. 基于MFC SDI的图像处理程序(带效果图)
  4. HihoCode1721删除一个字符之后是回文字符串
  5. 基于android 定位系统,基于Android平台定位系统设计和实现
  6. docker部署sprinboot项目
  7. 有些生意很偏门,也有一定门槛,但是效益非常好
  8. JavaSE学习总结(八)—— 异常处理(Exception)
  9. Ubuntu打包发布qt程序
  10. 自增字段不连续_MySQL中自增主键不连续之解决方案。(20131109)
  11. 语义分割-ICCV2017 Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks循环一致对抗网
  12. Struts 2教程
  13. Windows环境下用C语言实现CS模型(基于TCP协议)
  14. ios 开发 flurry 资料
  15. abap开发那点事 (二)
  16. WebSocket 入门:简易聊天室
  17. Mac上如何用自带软件剪切音频(去除多余杂音)?
  18. beeline : Error: Could not open client transport with JDBC 连接失败
  19. React——相关js库以及使用React开发者工具调试
  20. 8b10b编码源码 matlab,8b/10b编码技术系列(一):Serdes、CDR、K码

热门文章

  1. 详解Python中函数和模块的特殊属性__annotations__
  2. Python编写编程作业批量自动打分程序的思路与实现
  3. python wrapper_Python functools之partial, update_wrapper, wraps
  4. python 的输入 输出
  5. python求圆柱体的体积_Python 常见优化技巧,让你的程序溜溜的跑起来!
  6. 如何用python打印田字格_如何用EXCEL做一套田字格模板?在家给小孩练习写字
  7. vim 删除当前词_vim 可视话模式(即删除一列和多列)
  8. html input 字体颜色_html 元素参考整合实用收藏!前端web工程师必备!
  9. mysql创建表格1warning_MySQL 复制表
  10. 华为随身wifi不显示无服务器,没网卡不要紧 华为随行WiFi Pro让你上网无忧