Python反射的用法實(shí)例分析
本文實(shí)例講述了Python反射的用法。分享給大家供大家參考,具體如下:
在做程序開(kāi)發(fā)中,我們常常會(huì)遇到這樣的需求:需要執(zhí)行對(duì)象里的某個(gè)方法,或需要調(diào)用對(duì)象中的某個(gè)變量,但是由于種種原因我們無(wú)法確定這個(gè)方法或變量是否存在,這是我們需要用一個(gè)特殊的方法或機(jī)制要訪問(wèn)和操作這個(gè)未知的方法或變量,這中機(jī)制就稱之為反射。接下記錄下反射幾個(gè)重要方法:
hasattr
判斷對(duì)象中是否有這個(gè)方法或變量
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。因?yàn)榇嬖趖alk方法 print(hasattr(p,"name")) # True。因?yàn)榇嬖趎ame變量 print(hasattr(p,"abc")) # False。因?yàn)椴淮嬖赼bc方法或變量
getattr
獲取對(duì)象中的方法或變量的內(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) # 此時(shí)打印的是:laowang f = getattr(p,"talk") # 獲取talk方法的內(nèi)存地址 f() # 調(diào)用talk方法
我們發(fā)現(xiàn)getattr有三個(gè)參數(shù),那么第三個(gè)參數(shù)是做什么用的呢?
s = getattr(p,"abc","not find") print(s) # 打印結(jié)果:not find。因?yàn)閍bc在對(duì)象p中找不到,本應(yīng)該報(bào)錯(cuò),屬性找不到,但因?yàn)樾薷牧苏也坏骄洼敵鰊ot find
setattr
為對(duì)象添加變量或方法
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ù)添加到對(duì)象中p中,并命名為talk p.talk(p) # 調(diào)用talk方法,因?yàn)檫@是額外添加的方法,需手動(dòng)傳入對(duì)象 setattr(p,"age",30) # 添加一個(gè)變量age,復(fù)制為30 print(p.age) # 打印結(jié)果:30
delattr
刪除對(duì)象中的變量。注意:不能用于刪除方法
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) # 此時(shí)將報(bào)錯(cuò)
更多關(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)典教程》
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
相關(guān)文章
Python Numpy庫(kù)常見(jiàn)用法入門教程
這篇文章主要介紹了Python Numpy庫(kù)常見(jiàn)用法,結(jié)合實(shí)例形式詳細(xì)Fenix了Python numpy庫(kù)基本功能、原理以及數(shù)組常見(jiàn)操作技巧,需要的朋友可以參考下2020-01-01Pyinstaller打包Scrapy項(xiàng)目的實(shí)現(xiàn)步驟
這篇文章主要介紹了Pyinstaller打包Scrapy項(xiàng)目的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09python 實(shí)現(xiàn)圖片上傳接口開(kāi)發(fā) 并生成可以訪問(wèn)的圖片url
今天小編就為大家分享一篇python 實(shí)現(xiàn)圖片上傳接口開(kāi)發(fā) 并生成可以訪問(wèn)的圖片url,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12Python網(wǎng)絡(luò)編程之xmlrpc模塊
這篇文章介紹了Python網(wǎng)絡(luò)編程之xmlrpc模塊,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05Python通過(guò)四大 AutoEDA 工具包快速產(chǎn)出完美數(shù)據(jù)報(bào)告
在三年前,我們做數(shù)據(jù)競(jìng)賽或者數(shù)據(jù)建模類的項(xiàng)目時(shí),前期我們會(huì)耗費(fèi)較多的時(shí)間去分析數(shù)據(jù),但現(xiàn)在非常多擅長(zhǎng)數(shù)據(jù)分析的大師們已經(jīng)將我們平時(shí)常看的數(shù)據(jù)方式進(jìn)行了集成,開(kāi)發(fā)了很多AutoEDA的工具包??梢詭椭覀児?jié)省大量時(shí)間2021-11-11python操作小程序云數(shù)據(jù)庫(kù)實(shí)現(xiàn)簡(jiǎn)單的增刪改查功能
這篇文章主要介紹了python操作小程序云數(shù)據(jù)庫(kù)實(shí)現(xiàn)簡(jiǎn)單的增刪改查功能,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-06-06python中內(nèi)置函數(shù)ord()返回字符串的ASCII數(shù)值實(shí)例詳解
ord()?函數(shù)是?chr()?函數(shù)(對(duì)于?8?位的?ASCII?字符串)的配對(duì)函數(shù),它以一個(gè)字符串(Unicode?字符)作為參數(shù),返回對(duì)應(yīng)的?ASCII?數(shù)值,或者?Unicode?數(shù)值,這篇文章主要介紹了python?中內(nèi)置函數(shù)ord()返回字符串的ASCII數(shù)值,需要的朋友可以參考下2022-07-07