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