Fay

反射

反射:

反射就是通过字符串映射到对象的属性,python的一切事物都是对象(都可以使用反射)

1,hasattr(object,name) # 判断object中有没有一个name字符串对应的方法或属性

2,getattr(object, name, default=None) 获取object中有没有对应的方法和属性

3,setattr(x, y, v) 设置对象及其属性

4,delattr(x, y) 删除类或对象的属性

实例一:

class Foo:
    def __init__(self,name):
        self.name = name


    def  get(self):
        print('aaa')

f1 = Foo('alex')

if hasattr(f1,'a'):     #判断Service这个类里面的方法,有没有字符串a这样命名的方法,
                        # f1是实例化的对象,通过hasattr去反射Service类里面有没有a方法
    func = getattr(f1,'a') #这里a为字符串
    func()
else:
    print('没有')

实例二:

class Service:
    def run(self):
        while True:
            cmd = input('>>>:').strip()  #接收用户输入
            if hasattr(self,cmd):  #判断,在进行用户交互时,hasattr后面的cmd不是字符串了!!!
                func = getattr(self, cmd)
                func()

    def get(self):
        print('get.....')

    def put(self):
        print('put..........')

obj = Service()
obj.run()
#如果cmd接收到的不是Service类里面的方法,就会一会重复要求输入
# 如果cmd接收到的是get,put方法,就会打印get,put里对应的信息

posted on 2018-09-27 21:48  sunny7  阅读(149)  评论(0编辑  收藏  举报

导航