反射的基本概念及應(yīng)用

1.反射的基本概念

反射的概念與簡(jiǎn)單示例
什么事反射:
反射的概念是由Smith在1982年首次提出的,主要是指程序可以訪(fǎng)問(wèn)、檢測(cè)和修改它本身狀態(tài)或行為的一種能力(自?。?。

創(chuàng)新互聯(lián)專(zhuān)注于企業(yè)成都全網(wǎng)營(yíng)銷(xiāo)、網(wǎng)站重做改版、東港網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5建站、商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性?xún)r(jià)比高,為東港等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。

hasattr(object,name)
判斷object類(lèi)中是否有name這個(gè)方法,或者是屬性,返回值為T(mén)rue或False;

getattr(object, name, default=None)
獲取object中名為name的這個(gè)方法或者是屬性;

setattr(x, y, v)
給name添加屬性

delattr(x, y)
刪除屬性設(shè)置

例1 判斷模塊中的方法或?qū)傩裕?/p>

 1 def func1():
 2     return '執(zhí)行了func1'
 3 
 4 
 5 def func2():
 6     return '執(zhí)行了func2'
 7 
 8 
 9 def func3():
10     return '執(zhí)行了func3'
 1 import my_model  # 同級(jí)目錄下直接導(dǎo)入定義的模塊
 2 
 3 
 4 option = str(input('option:')) 
 5 
 6 if not hasattr(my_model, option):
 7     print('輸入無(wú)效')
 8 else:
 9     ret = getattr(my_model, option)()
10     print(ret)

例2 在類(lèi)中的使用:

創(chuàng)建一個(gè)類(lèi),表示你認(rèn)識(shí)的人,

1 class Persion:
 2     def __init__(self, name, gender, qq):
 3         self.name = name
 4         self.gender = gender
 5         self.qq = qq
 6 
 7     def play(self):
 8         return '約{}出來(lái)玩'.format(self.name)
 9 
10     @property
11     def relation(self):
12         return '你和{}是朋友'.format(self.name)
13 
14 
15 print(hasattr(Persion, 'play'))  # True 有名為sell的方法
16 print(hasattr(Persion, 'relation')) # True

情況一:

你有l(wèi)isa的QQ,沒(méi)有penny的QQ和微信:

 1 p1 = Persion('lisa', 'girl', '242432')
 2 p2 = Persion('penny', 'girl', None)
 3 
 4 if hasattr(p1, 'qq'):
 5     print(getattr(p1, 'play')())
 6 else:
 7     print('沒(méi)有聯(lián)系方式')
 8 
 9 if hasattr(p2, 'WeChat'):
10     print(getattr(p2, 'play')())
11 else:
12     print('沒(méi)有聯(lián)系方式')
約lisa出來(lái)玩
沒(méi)有聯(lián)系方式

情況二:

你得到了penny的微信:

1 setattr(p2, 'WeChat', 'haha')
2 if hasattr(p2, 'WeChat'):
3     print(getattr(p2, 'play')())
4 else:
5     print('沒(méi)有聯(lián)系方式')
約penny出來(lái)玩

情況三:

penny刪除了你的微信:

1 delattr(p2, 'WeChat')
2 if hasattr(p2, 'WeChat'):
3     print(getattr(p2, 'play')())
4 else:
5     print('沒(méi)有聯(lián)系方式')
沒(méi)有聯(lián)系方式

#2.django中反射的應(yīng)用


    def post(self, request):
        func_obj = request.POST.get('action')
        if not hasattr(self, func_obj):
            return HttpResponse('你的訪(fǎng)問(wèn)不存在')
        ret = getattr(self, func_obj)()
        # 如果有ret的話(huà)返回get請(qǐng)求重新執(zhí)行
        return self.get(request)

獲取前段input框,提交的數(shù)據(jù),獲取name=‘a(chǎn)ction’,對(duì)應(yīng)的值,
如果hasattr()判斷有值得話(huà),getattr()調(diào)用執(zhí)行

分享文章:反射的基本概念及應(yīng)用
轉(zhuǎn)載來(lái)源:http://bm7419.com/article16/ijpidg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、小程序開(kāi)發(fā)、品牌網(wǎng)站建設(shè)、微信小程序、ChatGPT、電子商務(wù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)