CMDB 基础 6

唯一标识问题
由于ip有可能会重复,这里使用salt-minion_id作为对应服务的唯一标识来对应的每一客户端机器。
 
面向对象python2-3的区别
Python2 中class Foo()是经典类,class Foo(object)是新式类
Python3中class Foo()/class Foo(object)都是新式类
 
经典类在继承上是深度优先 ,新式类在继承上是C3算法,特点情况下是广度优先
 
 importlib反射代码讲解
反射:字符串映射到类中的对应方法,常用方法有getattr,hasattr,setattr
 
目录路径
16c523468e2eaf1e20886de4b565d49967a.jpg
 
disk.py
#!/usr/bin/env python
# coding:utf-8
 
class Disk(object):
    pass
    def run(self):
        print("disk...run")
 
cup.py
#!/usr/bin/env python
# coding:utf-8
 
class Cpu(object):
    pass
    def run(self):
        print("cpu...run")
 
mem.py
#!/usr/bin/env python
# coding:utf-8
 
class Mem(object):
    pass
    def run(self):
        print("men...run")
 
demo1.py
#!/usr/bin/env python
# coding:utf-8
 
import importlib
import os,sys
 
Host_func_dic = {
    'disk':'func_demo.hosts.disk.Disk',
    'mem':'func_demo.hosts.mem.Mem',
    'cpu':'func_demo.hosts.cpu.Cpu',
}
#host_li=['cpu','mem','ip']
 
for host in Host_func_dic.keys():
    path=Host_func_dic.get(host) #拿到'func_demo.hosts.disk.Disk'
    module_path,class_name = path.rsplit('.',maxsplit=1) #module_path=func_demo.hosts.disk class_name=Disk
    module = importlib.import_module(module_path) #等于from func_demo.hosts import disk 并且module=disk
    disk_class=getattr(module,class_name) #disk_class=getattr(disk,'Disk') 找到disk.py下的Disk类
 
    JG=disk_class() #Disk() 实例化对象
    JG.run() #执行类中的方法
 
disk...run
men...run
cpu...run
 
可以通过脚本定义好的key值来执行对应路径下的类的方法

转载于:https://my.oschina.net/u/3803568/blog/3004265

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值