python--反射機制
阿新 • • 發佈:2018-03-10
print obj import not HA true set 模塊名 else
python的反射機制能夠讓我們利用字符串去動態的驅動不同的事件,例如導入模塊,調用函數等,涉及到的函數有hasattr,getattr,setattr,delattr
- hasattr:檢查模塊或者對象中是否有某個成員
- getattr:獲取成員,即將字符串輸入的數據裝換成對應的成員
- setattr:設置成員
- delattr:刪除成員
1 modName=input("請輸入模塊名:") 2 #__import__:根據字符串輸入的模塊名導入相對應得模塊,如果有嵌套的模塊,需要加fromlist=True 3 name=__import__(‘se.‘+modName,fromlist=True)反射4 5 print(modName) 6 7 funcName=input("請輸入函數名:") 8 9 #檢查模塊中是否相對應得函數 10 exis=hasattr(name,funcName) 11 12 if exis: 13 #獲得函數 14 fun=getattr(name,funcName) 15 #執行函數 16 fun() 17 #獲得變量 18 value=getattr(name,"PYTHON") 19 print(value) 20 else: 21 print("not find") 2223 #設置 24 setattr(name,"NAME","LINUX") 25 print(hasattr(name,"NAME")) 26 #刪除 27 delattr(name,"PYTHON") 28 print(hasattr(name,"PYTHON"))
1 modName=input("請輸入模塊名:") 2 #__import__:根據字符串輸入的模塊名導入相對應得模塊,如果有嵌套的模塊,需要加fromlist=True 3 name=__import__(‘se.‘+modName,fromlist=True) 4 5 className=input("反射二請輸入類名:") 6 #將模塊中的類導入 7 cls=getattr(name,className) 8 #創建該類的一個實例 9 clsObj=cls() 10 #添加該對象的一個字段 11 clsObj.PYTHON="sdfsfdsf" 12 funcName=input("請輸入函數名:") 13 14 #檢查類中是否相對應得函數 15 exis=hasattr(clsObj,funcName) 16 17 if exis: 18 #獲得該對象的函數 19 fun=getattr(clsObj,funcName) 20 #執行該對象的函數 21 fun() 22 #獲得該對象的變量 23 value=getattr(clsObj,"PYTHON") 24 print(value) 25 else: 26 print("not find") 27 28 #設置 29 setattr(clsObj,"NAME","LINUX") 30 print(hasattr(clsObj,"NAME")) 31 #刪除該對象相對應的變量,如果該變量是屬於類的,那麽就會出錯 32 delattr(clsObj,"PYTHON") 33 print(hasattr(clsObj,"PYTHON"))
python--反射機制