反射
反射:
反射就是通过字符串映射到对象的属性,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里对应的信息