说明
说到反射,让人熟知的eval函数,python除了这个函数,还有import() ,getattr、hasattr、setattr、delattr等方法
eval函数
class Test(object):
def __init__(self):
self.name = 'leason'
def foo(self,name):
self.name = name
if __name__ == "__main__":
eval_test = eval('Test()')
print eval_test.name
<< leason
import()方法
import方法实际上是import导入模块的另一种方式
//效果相同
import leason
__import__('leason')
//多层导入
1. from app.serve import leason
2. __import__('app.serve.leason',fromlist=True) #如果不加上fromlist=True,只会导入list目录
操作成员getattr、hasattr、setattr、delattr
getattr、hasattr、setattr、delattr 获取成员、检查成员、设置成员、删除成员
class Test(object):
def __init__(self):
self.name = 'leason'
def func(self):
return True
obj = Test()
#获取成员
ret = getattr(obj, 'func')#获取的是个对象
r = ret()
print(r)
#检查成员
ret = hasattr(obj,'func')#因为有func方法所以返回True
print(ret)
#设置成员
print(obj.name) #设置之前为:leason
ret = setattr(obj,'name','leason1')
print(obj.name) #设置之后为:leason1
#删除成员
print(obj.name) #leason
delattr(obj,'name')
print(obj.name) #报错