day8-动态导入模块

产生背景

之前我们导入模块都是用import,或者from... import...这种模式去导入模块,那如果我们如何实现在只知道字符串的情况下就可以导入模块呢?下面就来说说如何动态导入模块,通过字符串就可以将模块导入。

动态导入模块的两种方式

目录结构

方式一:__import__(str)

mod = __import__("lib.aa")  #括号()里面必须是字符串str

print(mod)  #打印导入路径信息

instance = getattr(mod.aa,"C")  #生成一个对象 传统写法:instance = mod.aa.C()

obj = instance()
print(obj.name)

#输出
<module 'lib' from '/Users/huwei/PycharmProjects/s14/module_3/lib/__init__.py'> #只返回第一层路径lib
Dick

解析:可以看到使用__import__导入的lib.aa,实际上只是导入了lib模块

注:此导入模块的方式是解释器自己内部使用的

方式二:importlib(官方推荐使用)

import importlib #导入模块

mod = importlib.import_module("lib.aa") #括号()里面必须为str

print(mod) #打印导入路径信息

instance = getattr(mod,"C")  #生成一个对象 传统写法:instance = mod.C()

obj = instance()
print(obj.name)

#输出
<module 'lib.aa' from '/Users/huwei/PycharmProjects/s14/module_3/lib/aa.py'> #返回全路径aa
Dick
posted @ 2017-11-12 23:29  Mr.hu  阅读(101)  评论(0编辑  收藏  举报