1.反射(内置函數hasattr,getattr,setattr,delattr)
1)神賜給你的内置函數 :
a: getattr(命名空間,'函數名') == 命名空間.屬性名; 這裡的命名空間指的是對象或者類;
b: getattr四個應用場景:
1)類名.名字 <==> getattr(類名,'名字')
2)對象名.名字 <==> getattr(對象名,'名字')
3)子產品名.名字 <==> getattr(子產品名,'名字')
4)自己檔案名.名字 <==> getattr(自己檔案名,'名字')
c:getattr的天命圈
**getattr(命名空間,'函數名',預設值參數)這個預設值參數就很強大,getattr會先找指定成員,如果存在
則傳回成員引用,否則傳回預設值參數;但是你如果不傳預設值參數,如果找不到會報錯(它與hasttr異常處理的差別見下邊解釋)
是以總結來說,getattr就是把你用小數點調用的方式轉換為getattr(命名空間,‘靜态變量名/動态變量名)
2)hasattr():
a:功能指定對象中是否含有指定成員,有則傳回True,否則傳回False;
b:格式:hasattr(指定對象空間,變量名)
imp = input('>>>:')
imp_module = __import__(imp)
while 1:
fun_name = input('>>>:')
func = getattr(imp_module,fun_name,True) #如果找不到,則傳回預設參數
if func == True: #對找不到的情況處理
print('重新輸入!')
continue
else:
a = func()
print(a)
imp = input('>>>:')
imp_module = __import__(imp)
while 1:
fun_name = input('>>>:')
ret = hasattr(imp_module, fun_name) #檢視指定對象裡的情況,如果沒有傳回False
if ret == True: #對找不到的情況處理
func = getattr(imp_module,fun_name)
a = func()
print(len(a))
else:
print('重新輸入!')
continue
第一段程式是利用預設值 第二段是利用hasattr(後者是對指定對象空間處理,比較精準)
3)setattr():
a: 功能:給指定對象添加指定成員
b:格式:setattr(對象空間,要改的變量名,新值)
4)delattr()
a:功能删除指定對象中的指定成員
b:格式delattr(對象空間,變量名)