小結(jié)Python的反射機制
前言:
前兩天用Python實現(xiàn)了ftp服務(wù)器。在小項目中就用到了反射。因此寫個筆記鞏固下。
反射的定義:檢測和修改它本身狀態(tài)或行為的一種能力(自?。?。
而通過反射,Python可以通過字符串的映射或修改程序運行的狀態(tài)和方法。
反射的四個方法。hasattr,getattr,setattr,delattr
hasattr:判斷一個方法是否存在與這個類中
class Person(object):
def __init__(self,name):
self.name = name
def talk(self):
print("%s正在交談"%self.name)
p = Person("laowang")
print(hasattr(p,"talk")) # True。因為存在talk方法
print(hasattr(p,"name")) # True。因為存在name變量
print(hasattr(p,"abc")) # False。因為不存在abc方法或變量
getattr:根據(jù)字符串去獲取obj對象里的對應(yīng)的方法的內(nèi)存地址,加"()"括號即可執(zhí)行
class Person(object):
def __init__(self,name):
self.name = name
def talk(self):
print("%s正在交談"%self.name)
p = Person("laowang")
n = getattr(p,"name") # 獲取name變量的內(nèi)存地址
print(n) # 此時打印的是:laowang
f = getattr(p,"talk") # 獲取talk方法的內(nèi)存地址
f() # 調(diào)用talk方法
我們發(fā)現(xiàn)getattr有三個參數(shù),那么第三個參數(shù)是做什么用的呢?
s = getattr(p,"abc","not find")
print(s) # 打印結(jié)果:not find。因為abc在對象p中找不到,本應(yīng)該報錯,但因為修改了找不到就輸出not find
setattr:通過setattr將外部的一個函數(shù)綁定到實例中
def abc(self):
print("%s正在交談"%self.name)
class Person(object):
def __init__(self,name):
self.name = name
p = Person("laowang")
setattr(p,"talk",abc) # 將abc函數(shù)添加到對象中p中,并命名為talk
p.talk(p) # 調(diào)用talk方法,因為這是額外添加的方法,需手動傳入對象
setattr(p,"age",30) # 添加一個變量age,復(fù)制為30
print(p.age) # 打印結(jié)果:30
delattr:刪除一個實例或者類中的方法
class Person(object):
def __init__(self,name):
self.name = name
def talk(self):
print("%s正在交談"%self.name)
p = Person("laowang")
delattr(p,"name") # 刪除name變量
print(p.name) # 此時將報錯
為什么用反射
好處一:
實現(xiàn)可插拔機制
可以事先定義好接口,接口只有在被完成后才會真正執(zhí)行,這實現(xiàn)了即插即用,這其實是一種‘后期綁定'
好處二:
動態(tài)導(dǎo)入模塊(基于反射當(dāng)前模塊成員)
以上就是小結(jié)Python的反射機制的詳細(xì)內(nèi)容,更多關(guān)于python 反射的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python實現(xiàn)的web監(jiān)控系統(tǒng)
這篇文章主要介紹了python實現(xiàn)的web監(jiān)控系統(tǒng),幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下2021-04-04
Pandas數(shù)據(jù)連接pd.concat的實現(xiàn)
本文主要介紹了Pandas數(shù)據(jù)連接pd.concat的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
Python中使用matplotlib模塊errorbar函數(shù)繪制誤差棒圖實例代碼
在matplotlib中,errorbar方法用于繪制帶誤差線的折線圖,下面這篇文章主要給大家介紹了關(guān)于Python中使用matplotlib模塊errorbar函數(shù)繪制誤差棒圖的相關(guān)資料,需要的朋友可以參考下2022-08-08
解決遇到:PytorchStreamReader failed reading zip&n
本文針對"PytorchStreamReaderfailedreadingziparchive:failedfindingcentral"錯誤提出解決方案,包括檢查文件完整性、文件路徑,嘗試更新PyTorch版本,檢查壓縮文件格式,代碼問題,或?qū)で蠹夹g(shù)支持等,希望這些經(jīng)驗?zāi)芙o遇到同樣問題的人一個參考2024-09-09
python深度學(xué)習(xí)借助多標(biāo)簽分類器進(jìn)行對抗訓(xùn)練
這篇文章主要為大家介紹了python深度學(xué)習(xí)中如何借助多標(biāo)簽分類器進(jìn)行對抗訓(xùn)練,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-01-01
Python 使用 Pillow 模塊給圖片添加文字水印的方法
這篇文章主要介紹了Python 使用 Pillow 模塊給圖片添加文字水印的方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2019-08-08

