十七、python中的importlib反射

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字典中加入对应的值,然后遍历就可以了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值