Python反射的用法實例分析
本文實例講述了Python反射的用法。分享給大家供大家參考,具體如下:
在做程序開發(fā)中,我們常常會遇到這樣的需求:需要執(zhí)行對象里的某個方法,或需要調(diào)用對象中的某個變量,但是由于種種原因我們無法確定這個方法或變量是否存在,這是我們需要用一個特殊的方法或機制要訪問和操作這個未知的方法或變量,這中機制就稱之為反射。接下記錄下反射幾個重要方法:
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
獲取對象中的方法或變量的內(nèi)存地址
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
為對象添加變量或方法
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) # 此時將報錯
更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python加密解密算法與技巧總結(jié)》、《Python編碼操作技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門與進(jìn)階經(jīng)典教程》
希望本文所述對大家Python程序設(shè)計有所幫助。
相關(guān)文章
Pyinstaller打包Scrapy項目的實現(xiàn)步驟
這篇文章主要介紹了Pyinstaller打包Scrapy項目的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09python 實現(xiàn)圖片上傳接口開發(fā) 并生成可以訪問的圖片url
今天小編就為大家分享一篇python 實現(xiàn)圖片上傳接口開發(fā) 并生成可以訪問的圖片url,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12Python網(wǎng)絡(luò)編程之xmlrpc模塊
這篇文章介紹了Python網(wǎng)絡(luò)編程之xmlrpc模塊,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-05-05Python通過四大 AutoEDA 工具包快速產(chǎn)出完美數(shù)據(jù)報告
在三年前,我們做數(shù)據(jù)競賽或者數(shù)據(jù)建模類的項目時,前期我們會耗費較多的時間去分析數(shù)據(jù),但現(xiàn)在非常多擅長數(shù)據(jù)分析的大師們已經(jīng)將我們平時??吹臄?shù)據(jù)方式進(jìn)行了集成,開發(fā)了很多AutoEDA的工具包。可以幫助我們節(jié)省大量時間2021-11-11python操作小程序云數(shù)據(jù)庫實現(xiàn)簡單的增刪改查功能
這篇文章主要介紹了python操作小程序云數(shù)據(jù)庫實現(xiàn)簡單的增刪改查功能,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-06-06python中內(nèi)置函數(shù)ord()返回字符串的ASCII數(shù)值實例詳解
ord()?函數(shù)是?chr()?函數(shù)(對于?8?位的?ASCII?字符串)的配對函數(shù),它以一個字符串(Unicode?字符)作為參數(shù),返回對應(yīng)的?ASCII?數(shù)值,或者?Unicode?數(shù)值,這篇文章主要介紹了python?中內(nèi)置函數(shù)ord()返回字符串的ASCII數(shù)值,需要的朋友可以參考下2022-07-07