day25 Python四个可以实现自省的函数,反射
生活随笔
收集整理的這篇文章主要介紹了
day25 Python四个可以实现自省的函数,反射
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
python面向對象中的反射:通過字符串的形式操作對象相關的屬性。python中的一切事物都是對象(都可以使用反射)
四個可以實現自省的函數
下列方法適用于類和對象(一切皆對象,類本身也是一個對象)
hasattr、getattr、setattr、delattr
class BlackMedium:feature='Ugly'def __init__(self,name,addr):self.name=nameself.addr=addrdef sell_house(self):print('%s 黑中介賣房子啦,傻逼才買呢,但是誰能證明自己不傻逼'%self.name)def rent_house(self):print('%s 黑中介租房子啦,傻逼才租呢'% self.name)b1=BlackMedium('萬成置地','回龍觀天露園') #檢測是否含有某屬性 print(hasattr(b1,'name')) print(hasattr(b1,'sell_house')) #獲取屬性 n=getattr(b1,'name') print(n) func=getattr(b1,'rent_house') func()# getattr(b1,'aaaaaaaa') #報錯 #print(getattr(b1,'aaaaaaaa','不存在啊'))#設置屬性 setattr(b1,'sb',True) setattr(b1,'show_name',lambda self:self.name+'sb') print(b1,'shou_name') print(b1.__dict__) print(b1.show_name(b1))。#刪除屬性 delattr(b1,'addr') delattr(b1,'show_name') delattr(b1,'show_name111')#不存在,則報錯print(b1.__dict__)結果: True True 萬成置地 萬成置地 黑中介租房子啦,傻逼才租呢 <__main__.BlackMedium object at 0x7f47a9d83630> shou_name {'name': '萬成置地', 'addr': '回龍觀天露園', 'sb': True, 'show_name': <function <lambda> at 0x7f47a9d79158>} 萬成置地sb為什么用反射之反射的好處
好處一:實現可插拔機制
有倆程序員,一個lili,一個是egon,lili在寫程序的時候需要用到egon所寫的類,但是egon去跟女朋友度蜜月去了,還沒有完成他寫的類,lili想到了反射,使用了反射機制lili可以繼續完成自己的代碼,等egon度蜜月回來后再繼續完成類的定義并且去實現lili想要的功能。
總之反射的好處就是,可以事先定義好接口,接口只有在被完成后才會真正執行,這實現了即插即用,這其實是一種‘后期綁定’,什么意思?即你可以事先把主要的邏輯寫好(只定義接口),然后后期再去實現接口的功能
#ftp.pyclass FtpClient:'ftp客戶端,但是還么有實現具體的功能'def __init__(self,addr):print('正在連接服務器[%s]' %addr)self.addr=addr# def get(self):# print('正在連接服務器get中')?
#client.py from ftp import FtpClient f1=FtpClient('192.168.122.135') if hasattr(f1,'get'):func=getattr(f1,'get')func() else:print('---->不存在此方法')print('處理其他的邏輯')?
轉載于:https://www.cnblogs.com/charon2/p/10438134.html
總結
以上是生活随笔為你收集整理的day25 Python四个可以实现自省的函数,反射的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: phoenix hbase Can't
- 下一篇: ios 原生骨架动画库