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

首頁 > 編程 > Python > 正文

Python面向對象之反射/自省機制實例分析

2020-02-15 22:48:03
字體:
來源:轉載
供稿:網友

本文實例講述了Python面向對象之反射/自省機制。分享給大家供大家參考,具體如下:

反射:程序可以訪問,檢測和修改它本身狀態或行為的一種能力(自省)

下面就介紹四種實現自省的函數,適用于類和對象

1. 判斷object中有沒有一個name字符串對應的屬性或者方法

hasattr(object,name)

2. 獲取object中name字符串對應的屬性值或者方法地址,其中default參數的作用是,在找不到屬性的時候,給予調用者的提示信息。

getattr(object,name,default= None)

3. 將object中name字符串對應的屬性值設置為value,這個屬性可以是新增的屬性。

setattr(object,name,value)

4. 刪除object中name字符串對應的屬性。

delattr(object,name)

四個方法的演示

class BlackMedium:  feture = 'Ugly'  def __init__(self,name,addr):    self.name = name    self.addr = addr  def sell_house(self):    print('%s賣房子'%(self.name))  def rent_house(self):    print('%s租房子'%(self.name))b1 = BlackMedium('萬成置地','天露園')#檢測是否含有某個屬性print(hasattr(b1,'name'))print(hasattr(b1,'sell_house'))#獲取屬性temp = getattr(b1,'name')print(temp)func = getattr(b1,'rent_house')func()#getattr(b1,'aaaaaa') 獲取不存在的屬性,就會報錯。print(getattr(b1,'aaaaa','該屬性不存在'))#設置數據屬性和方法屬性setattr(b1,'sb',True)setattr(b1,'show_name',lambda self:self.name + 'sb')print(b1.__dict__)print(b1.show_name(b1))#刪除屬性delattr(b1,'addr')delattr(b1,'show_name')#刪除不存在的屬性,報錯delattr(b1,'show_name123')print(b1.__dict__)

運行結果:

True
True
萬成置地
萬成置地租房子
該屬性不存在
{'sb': True, 'show_name': <function <lambda> at 0x01BCA7F0>, 'name': '/xe4/xb8/x87/xe6/x88/x90/xe7/xbd/xae/xe5/x9c/xb0', 'addr': '/xe5/xa4/xa9/xe9/x9c/xb2/xe5/x9b/xad'}
萬成置地sb
Traceback (most recent call last):
  File "C:/py/jb51PyDemo/src/Demo/test.py", line 37, in <module>
    delattr(b1,'show_name123')
AttributeError: BlackMedium instance has no attribute 'show_name123'

為什么用反射呢?

舉例:兩個程序員A,B,A在寫程序用到B寫的類,但是B還沒有完成這個類的編寫。此時就可以用到反射,完成A自己想要編寫的代碼。并且不影響B的后期編碼。

好處:可以事先定義好接口,接口只有在被完成時,才會真正執行,實現了即插即用,也就是一種后期綁定,即先定義接口,后期在實現接口的功能。

B還沒有實現的全部功能

class FtpClient:   #ftp客戶端,但是還沒有實現功能   def __init__(self,addr):     print('正在連接服務器[%s]'%(self.addr))     self.addr = addr            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 香港 | 南川市| 龙州县| 梓潼县| 湟中县| 富川| 山东省| 宁海县| 香河县| 大姚县| 桃园县| 汝南县| 阿拉尔市| 新郑市| 蒙山县| 福安市| 稻城县| 保定市| 西乌珠穆沁旗| 红原县| 丹寨县| 余庆县| 昌都县| 哈密市| 桂平市| 二手房| 靖边县| 宜丰县| 合江县| 山西省| 隆昌县| 论坛| 龙胜| 盘山县| 江都市| 平和县| 镇巴县| 南安市| 子洲县| 葵青区| 鹤山市|