Python importlib
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相关推荐
- Python Importlib.import_module动态导入模块
我的环境是:os系统 python 3.7 在学这个模块之前我们先获取下该模块的路径如下: >>>import module >>>print(module.__f ...
- Python Importlib模块与__import__详解
阅读目录 Importlib模块与__import__都可以通过过字符串来导入另外一个模块,但在用法上和本质上都有很大的不同. 以一个例子为证: 以下为我的工程目录结构: lib/test.py: - ...
- python importlib bootstrap_python - importlib._bootstrap和Python解释器初始化 - SO中文参考 - www.soinside.com...
CPython的解释模块导入系统是用Python编写本身和importlib._bootstrap被初始化.它的来源可以importlib/_bootstrap.py可以看到,但它不是从那里加载.相反 ...
- python importlib_学习python importlib的导入机制
1. Importer协议 协议涉及两个对象: Finder 和 loader 1. Finder 实现了方法: finder.find_module(fullname, path=None) 返回一 ...
- python importlib qpython_Python的import机制
模块与包 在了解 import 之前,有两个概念必须提一下: 模块: 一个 .py 文件就是一个模块(module) 包: __init__.py 文件所在目录就是包(package) 当然,这只是极 ...
- python importlib qpython_Python imports指南:Python的导入有更好的理解
声明:如果你每天写Python,你会发现这篇文章中没有新东西. 这是专为那些像运维人员等偶尔使用Python的人以及那些忘记/误用python import的人写的. 尽管如此,代码是用Python ...
- python importlib
api 文档 importlib.import_module(name, package=None) Import a module. The name argument specifies what ...
- python之getattr()函数和importlib库的使用
1.getattr()介绍 2.如果对象obj是类对象 3.如果对象obj是模块对象 4.如果查看对象obj的属性? 5.总结 6.importlib的使用 之所以使用到getattr()函数,因为我 ...
- python最新版本是多少(python最新版)
python所有版本发布时间? Python的所有版本发布时间如下: Python3.3.2发布于2013年5月15日. Python3.2.5发布于2013年5月15日. Python3.1.5发布 ...
最新文章
- hook 驱动 截屏
- Java集合:Hashtable源码分析
- 基于MFC SDI的图像处理程序(带效果图)
- HihoCode1721删除一个字符之后是回文字符串
- 基于android 定位系统,基于Android平台定位系统设计和实现
- docker部署sprinboot项目
- 有些生意很偏门,也有一定门槛,但是效益非常好
- JavaSE学习总结(八)—— 异常处理(Exception)
- Ubuntu打包发布qt程序
- 自增字段不连续_MySQL中自增主键不连续之解决方案。(20131109)
- 语义分割-ICCV2017 Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks循环一致对抗网
- Struts 2教程
- Windows环境下用C语言实现CS模型(基于TCP协议)
- ios 开发 flurry 资料
- abap开发那点事 (二)
- WebSocket 入门:简易聊天室
- Mac上如何用自带软件剪切音频(去除多余杂音)?
- beeline : Error: Could not open client transport with JDBC 连接失败
- React——相关js库以及使用React开发者工具调试
- 8b10b编码源码 matlab,8b/10b编码技术系列(一):Serdes、CDR、K码
热门文章
- 详解Python中函数和模块的特殊属性__annotations__
- Python编写编程作业批量自动打分程序的思路与实现
- python wrapper_Python functools之partial, update_wrapper, wraps
- python 的输入 输出
- python求圆柱体的体积_Python 常见优化技巧,让你的程序溜溜的跑起来!
- 如何用python打印田字格_如何用EXCEL做一套田字格模板?在家给小孩练习写字
- vim 删除当前词_vim 可视话模式(即删除一列和多列)
- html input 字体颜色_html 元素参考整合实用收藏!前端web工程师必备!
- mysql创建表格1warning_MySQL 复制表
- 华为随身wifi不显示无服务器,没网卡不要紧 华为随行WiFi Pro让你上网无忧