当前位置:   article > 正文

python杂记——动态加载模块和类_importlib动态加载库中的类

importlib动态加载库中的类

python中动态加载模块主要有这几种方法:使用系统函数__import__();使用imp模块, 在3.4版本后弃用了,使用importlib代替;使用importlib模块;使用exec函数。而加载类和方法需要在加载模块后从模块中获取。下面分别介绍一下这几种方法。

import

使用__import__函数不需要额外引入其他包。直接上代码

importlib

importlib.import_module(name, package=None)
导入一个模块。参数 name 指定了以绝对或相对导入方式导入什么模块 (比如要么像这样 pkg.mod 或者这样 …mod)。如果参数 name 使用相对导入的方式来指定,那么那个参数 packages 必须设置为那个包名,作为解析这个包的锚点 (比如 import_module(’…mod’, ‘pkg.subpkg’) 将会导入 pkg.mod)。

import_module和__import__这两个函数之间最重要的区别是 import_module() 返回指定的包或模块(例如 pkg.mod),而 import() 返回顶级包或模块(例如 pkg)。

importlib.reload(module)
importlib还可以重新加载之前已经导入的module。参数为一个模块对象,在reload之前已经成功导入了。更详细的信息从官方文档了解:https://docs.python.org/3.7/library/importlib.html#importlib.reload

exec

直接看代码吧。

测试代码:

#import imp
import importlib

def test_import():
	module_name = "class_define"
	my_module = __import__(module_name)
	print("test_import imported module: ", my_module)
	print("test_import module: ", dir(my_module))
	
	class_name = "MyClass"
	class_ = getattr(my_module, class_name)
	print("test_import get class: ", class_)
	
	obj = class_()
	#for attr in dir(obj):
	print("test_import obj attr: ", dir(obj))
		
def test_import_class():
	module_name = "class_define"
	class_name = "MyClass"
	my_module = __import__(module_name, globals(), locals(), fromlist=[class_name])
	print("test_import_class imported module: ", my_module)
	print("test_import_class module: ", dir(my_module))
	
	
def test_importlib():
	module_name = "class_define"
	class_name = "MyClass"
	my_module = importlib.import_module(".", module_name)
	print("test_importlib imported module: ", my_module)
	print("test_importlib module: ", dir(my_module))
	
	importlib.reload(my_module)
	
def test_exec():
	lo = locals()
	module_name = "class_define"
	class_name = "MyClass"
	import_str = "import {}".format(module_name)
	
	my_module = exec(import_str)
	print("test_exec imported module: ", lo[module_name])
	print("test_exec module: ", dir(lo[module_name]))
	
	
	
if __name__ == "__main__":
	test_import()
	test_import_class()
	test_importlib()
	test_exec()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/272212
推荐阅读
相关标签
  

闽ICP备14008679号