十七、python中的importlib反射

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_25611295/article/details/86574351

importlib反射,可以动态的导入模块来执行方法。
它有三个方法:getattr,hasattr,setattr。

此处,我们可以利用getattr,动态的导入模块来执行类方法,不用手动的执行from xxx import xxx。极大的简洁和方便了开发。
例如我们获取服务器的参数,其中获取disk的方法写入一个py文件:
路径为:func/hosts/disk.py

class Disk(object):
    def run(self):
        print("disk running...")

我们在正常的代码中调用disk.py:

import importlib
#from func.hosts import disk
Host_func_dic = {
    'disk':'func.hosts.disk.Disk',
#    'disk':'func.hosts.cpu.Cpu',
#    'disk':'func.hosts.mem.Mem',
}
path = Host_func_dic.get('disk')

#字符串从右分割一次。
module_path,class_name = path.rsplit('.',maxsplit=1)
print('module_path-->',module_path)
print('class_name-->',class_name)
#下面相当于from func.hosts import disk
module = importlib.import_module(module_path)
#import_module反射,getattr(disk,'Disk'),disk 代表disk.py,Disk代表类
disk_class = getattr(module,class_name)
#实例化Disk类
JG=disk_class()
JG.run()

运行该代码:

module_path--> func.hosts.disk
class_name--> Disk
disk running...

这样我们就能调用到disk下面的Disk类了。如果想多调用几个类,只需在Host_func_dic字典中加入对应的值,然后遍历就可以了。

猜你喜欢

转载自blog.csdn.net/qq_25611295/article/details/86574351