反射的概念與簡單示例
什么事反射:
反射的概念是由Smith在1982年首次提出的,主要是指程序可以訪問、檢測和修改它本身狀態(tài)或行為的一種能力(自?。?。
hasattr(object,name)
判斷object類中是否有name這個(gè)方法,或者是屬性,返回值為True或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 # 同級目錄下直接導(dǎo)入定義的模塊
2
3
4 option = str(input('option:'))
5
6 if not hasattr(my_model, option):
7 print('輸入無效')
8 else:
9 ret = getattr(my_model, option)()
10 print(ret)
例2 在類中的使用:
創(chuàng)建一個(gè)類,表示你認(rèn)識的人,
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 '約{}出來玩'.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,沒有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('沒有聯(lián)系方式')
8
9 if hasattr(p2, 'WeChat'):
10 print(getattr(p2, 'play')())
11 else:
12 print('沒有聯(lián)系方式')
約lisa出來玩
沒有聯(lián)系方式
情況二:
你得到了penny的微信:
1 setattr(p2, 'WeChat', 'haha')
2 if hasattr(p2, 'WeChat'):
3 print(getattr(p2, 'play')())
4 else:
5 print('沒有聯(lián)系方式')
約penny出來玩
情況三:
penny刪除了你的微信:
1 delattr(p2, 'WeChat')
2 if hasattr(p2, 'WeChat'):
3 print(getattr(p2, 'play')())
4 else:
5 print('沒有聯(lián)系方式')
沒有聯(lián)系方式
#2.django中反射的應(yīng)用
def post(self, request):
func_obj = request.POST.get('action')
if not hasattr(self, func_obj):
return HttpResponse('你的訪問不存在')
ret = getattr(self, func_obj)()
# 如果有ret的話返回get請求重新執(zhí)行
return self.get(request)
獲取前段input框,提交的數(shù)據(jù),獲取name=‘a(chǎn)ction’,對應(yīng)的值,
如果hasattr()判斷有值得話,getattr()調(diào)用執(zhí)行
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。