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

首頁 > 編程 > Python > 正文

Python反射的用法實例分析

2020-01-04 15:52:07
字體:
來源:轉載
供稿:網友

本文實例講述了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教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 山阴县| 宁国市| 互助| 永寿县| 浦城县| 团风县| 简阳市| 贵阳市| 定远县| 如皋市| 石屏县| 安图县| 夏津县| 谷城县| 团风县| 栖霞市| 海盐县| 黑河市| 申扎县| 仪征市| 乌恰县| 东山县| 天津市| 香格里拉县| 财经| 济宁市| 林甸县| 嵩明县| 涞源县| 松江区| 仁寿县| 蒙自县| 房产| 财经| 安国市| 景德镇市| 论坛| 嘉定区| 文安县| 仁化县| 邛崃市|