国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python反射的用法實例分析

2020-02-22 23:14:13
字體:
來源:轉載
供稿:網友

本文實例講述了Python反射的用法。分享給大家供大家參考,具體如下:

在做程序開發中,我們常常會遇到這樣的需求:需要執行對象里的某個方法,或需要調用對象中的某個變量,但是由于種種原因我們無法確定這個方法或變量是否存在,這是我們需要用一個特殊的方法或機制要訪問和操作這個未知的方法或變量,這中機制就稱之為反射。接下記錄下反射幾個重要方法:

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

獲取對象中的方法或變量的內存地址

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變量的內存地址print(n)    # 此時打印的是:laowangf = getattr(p,"talk") # 獲取talk方法的內存地址f()      # 調用talk方法

我們發現getattr有三個參數,那么第三個參數是做什么用的呢?

s = getattr(p,"abc","not find")print(s)    # 打印結果:not find。因為abc在對象p中找不到,本應該報錯,屬性找不到,但因為修改了找不到就輸出not find

setattr

為對象添加變量或方法

def abc(self): print("%s正在交談"%self.name)class Person(object): def __init__(self,name):  self.name = namep = Person("laowang")setattr(p,"talk",abc) # 將abc函數添加到對象中p中,并命名為talkp.talk(p)    # 調用talk方法,因為這是額外添加的方法,需手動傳入對象setattr(p,"age",30)  # 添加一個變量age,復制為30print(p.age)   # 打印結果: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)   # 此時將報錯

更多關于Python相關內容感興趣的讀者可查看本站專題:《Python數據結構與算法教程》、《Python加密解密算法與技巧總結》、《Python編碼操作技巧總結》、《Python函數使用技巧總結》、《Python字符串操作技巧匯總》及《Python入門與進階經典教程》

希望本文所述對大家Python程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 清远市| 商河县| 双桥区| 沿河| 连山| 肃宁县| 台中市| 余江县| 池州市| 开化县| 新巴尔虎右旗| 马鞍山市| 尚志市| 昌黎县| 水富县| 虞城县| 景东| 潼南县| 武宣县| 寿阳县| 土默特右旗| 克什克腾旗| 漳平市| 平果县| 宁晋县| 葵青区| 华亭县| 西盟| 乌苏市| 灵山县| 尚志市| 酉阳| 三明市| 平凉市| 山西省| 彭泽县| 微山县| 灵石县| 英超| 伊金霍洛旗| 灵石县|