反射到底是個(gè)啥?
反射這個(gè)詞從邏輯上來說和倒影是差不多的,從一個(gè)3D的立體變成一個(gè)二維的平面影像,其實(shí)但從這個(gè)上面就已經(jīng)可以理解在編程中反射是干啥用的了。
用官方的話說"反射主要是指程序可以訪問、檢測和修改它本身狀態(tài)或行為的一種能力"。
其實(shí)本質(zhì)上簡單說,就是把一個(gè)對(duì)象類型拆解。可以使用字符串的形式去訪問和修改對(duì)象。
為什么要使用反射?他幫我們解決了什么問題?
首先有反射那么就有"正射"。
正常情況下是導(dǎo)入模塊,找到想要的類,再創(chuàng)建實(shí)例對(duì)象,接著再調(diào)用方法,這個(gè)方法太麻煩了,一個(gè)程序不停的運(yùn)行,所需要的功能不斷增多,不可能手動(dòng)去一一導(dǎo)入,而且還需要程序去進(jìn)行判斷某個(gè)模塊功能是否變動(dòng),這種情況必須只能是使用反射了。
這也是為什么很多框架是必須使用反射的原因了,因?yàn)榉瓷鋷椭麄兲峁┝艘幌聨c(diǎn)能力。
1.能夠用字符串的形式去操作對(duì)象,提高了程序的靈活性和擴(kuò)展性。
2.降低了耦合性,提升了代碼的健壯性和自適應(yīng)能力。
3.這種形式可以應(yīng)對(duì)任何類的對(duì)象。
那么反射怎么使用呢?
Python/ target=_blank class=infotextkey>Python的內(nèi)置函數(shù)提供了強(qiáng)大的反射機(jī)制,
__import__()加載模塊
dir()列表形式返回屬性和方法
hasattr()檢測是否含有某屬性
getattr()獲取屬性
setattr()設(shè)置屬性
delattr()刪除屬性
首先創(chuàng)建一個(gè)文件say.py并再其中聲明一個(gè)類say,創(chuàng)建一個(gè)sayLove方法。
接著再另一個(gè)文件中使用__import__以字符串形式導(dǎo)入模塊,讀取其中的say類。