python 动态加载模块、类、函数

背景

在Java中我们可以通过反射来根据类名创建类实例,那么在Python我们怎么实现类似功能呢?

  • importlib (或者低版本中的import)
    -

简介

方式一

1
2
3
4
if data=='a':
import loader_a as loader
else:
import load_b as loader

方式二

1
2
3
4
5
6
7
8
import importlib

def class_for_name(module_name, class_name):
# load the module, will raise ImportError if module cannot be loaded
m = importlib.import_module(module_name)
# get the class, will raise AttributeError if class cannot be found
c = getattr(m, class_name)
return c

更优雅的方式

动态加载模块:
方式1:系统函数import()
方式2:imp, importlib 模块
方式3:exec 函数

动态加载类和函数
首先,使用加载模块,使用内置函数提供的反射方法getattr(),依次按照层级获取模块->类\全局方法->类对象\类方法。

##

Java的方式

参考

https://blog.csdn.net/shijichao2/article/details/51165576