【python學習筆記】Python反射機制

leason-love發表於2017-09-20

說明

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

leason | 個人部落格

相關文章