1、反射定義:
主要指程序可以訪問、檢測、修改它本身狀態的一種能力(類比自省),這一概念的提出很快引發了計算機科學領域關於應用反射性的研究,它首先被程序語言的設計所採用,並在Lisp和麪向對象方面取得了成就
=2、四個可以實現自省的函數:=
(1)判斷object中有沒有name字符串對應的方法和屬性,name可以是函數也可以是參數,還可以是變量,返回結果爲True、False
hasattr(object,name)
(2)獲取name屬性,如果沒有會報錯,但是添加default屬性後,沒有name會直接打印default值
getattr(object,name,default=None)
#舉例:
print(getattr(test,"fsjhsdgsg","沒有該屬性"))
#輸出結果:
沒有該屬性
(3)設置屬性對象的屬性,還可以直接修改當前對象的屬性
setattr(x,y,v)
#舉例:
setattr(test,"a",True)
print(test.__dict__)
#輸出結果:
顯示test的對象屬性,其中包含{"a":True}
(4)刪除對象屬性
delattr(x,y)
#舉例
delattr(test,"a")
print(test.__dict__)
#輸出結果:
此時是沒有{“a”:True}這個屬性值的了
3、爲什麼要用反射
A和B兩個人同時寫代碼完成一個功能,A需要調用B的類,但是B有事請假了,類還沒有完成,這時候A就可以使用反射機制完成自己的代碼。使用反射的好處就是可以事先定義好接口,接口只有被完成纔會真正執行,這實現了即插即用。即事先把主要的邏輯寫好,後期再實現接口的功能。