日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

day25 Python四个可以实现自省的函数,反射

發(fā)布時間:2025/4/5 python 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 day25 Python四个可以实现自省的函数,反射 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

python面向?qū)ο笾械姆瓷?#xff1a;通過字符串的形式操作對象相關(guān)的屬性。python中的一切事物都是對象(都可以使用反射)

四個可以實(shí)現(xiàn)自省的函數(shù)

下列方法適用于類和對象(一切皆對象,類本身也是一個對象)

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','不存在啊'))#設(shè)置屬性 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__)結(jié)果: True True 萬成置地 萬成置地 黑中介租房子啦,傻逼才租呢 <__main__.BlackMedium object at 0x7f47a9d83630> shou_name {'name': '萬成置地', 'addr': '回龍觀天露園', 'sb': True, 'show_name': <function <lambda> at 0x7f47a9d79158>} 萬成置地sb

為什么用反射之反射的好處

好處一:實(shí)現(xiàn)可插拔機(jī)制

有倆程序員,一個lili,一個是egon,lili在寫程序的時候需要用到egon所寫的類,但是egon去跟女朋友度蜜月去了,還沒有完成他寫的類,lili想到了反射,使用了反射機(jī)制lili可以繼續(xù)完成自己的代碼,等egon度蜜月回來后再繼續(xù)完成類的定義并且去實(shí)現(xiàn)lili想要的功能。

總之反射的好處就是,可以事先定義好接口,接口只有在被完成后才會真正執(zhí)行,這實(shí)現(xiàn)了即插即用,這其實(shí)是一種‘后期綁定’,什么意思?即你可以事先把主要的邏輯寫好(只定義接口),然后后期再去實(shí)現(xiàn)接口的功能

#ftp.pyclass FtpClient:'ftp客戶端,但是還么有實(shí)現(xiàn)具體的功能'def __init__(self,addr):print('正在連接服務(wù)器[%s]' %addr)self.addr=addr# def get(self):# print('正在連接服務(wù)器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('處理其他的邏輯')

?

轉(zhuǎn)載于:https://www.cnblogs.com/charon2/p/10438134.html

總結(jié)

以上是生活随笔為你收集整理的day25 Python四个可以实现自省的函数,反射的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。