反射说简单点 --> 就是利用字符串的形式去对象(模块)中操作(寻找/检查/删除/设置)成员。
1.根据字符串的形式导入模块。
2.根据字符串的形式去对象(某个模块)中操作其成员
说反射之前先介绍一下__import__方法,这个和import导入模块的另一种方式
1. import commons 2. __import__(‘commons‘)
如果是多层导入:
1. from list.text import commons 2. __import__(‘ list.text.commons‘,fromlist=True) #如果不加上fromlist=True,只会导入list目录
反射即想到4个内置函数分别为:getattr、hasattr、setattr、delattr 获取成员、检查成员、设置成员、删除成员下面逐一介绍先看例子:
class Foo(): def __init__(self): self.name = ‘abc‘ def func(self): return "OK" obj = Foo() # 获取成员 ret = getattr(obj, ‘func‘) # 获取的是个对象 r = ret() print(r) # 检查成员 ret = hasattr(obj, ‘func‘) # 因为有func方法所以返回True print(ret) # 设置成员 print(obj.name) # 设置之前为:abc ret = setattr(obj, ‘name‘, 19) print(obj.name) # 设置之后为:19 # 删除成员 print(obj.name) # abc delattr(obj, ‘name‘) #print(obj.name) # 报错
OK
True
abc
19