說明
說到反射,讓人熟知的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) #報錯