最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2018年08月24日 09:10:57   作者:小清新  
這篇文章主要介紹了Python面向對象之反射/自省機制,結合實例形式分析了Python面向對象程序設計中的反射/自省機制概念、原理及相關屬性操作技巧,需要的朋友可以參考下

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

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

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

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(tài)的后期編碼。

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

B還沒有實現的全部功能

class FtpClient:
   #ftp客戶端,但是還沒有實現功能
   def __init__(self,addr):
     print('正在連接服務器[%s]'%(self.addr))
     self.addr = addr

A后期的代碼編寫

from module import FtpClient
f1 = FtpClient('198.1.1.1')
#在編寫某個方法前,先判斷該方法是否存在,存在就可以直接調用,不存在就要編寫。
if hasattr(f1,'get'):
  func_get = getattr(f1,'get')
  func_get()
else
  print('-----》不存在這個方法')
  print('處理其他的邏輯')

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

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

相關文章

  • Python內建模塊struct實例詳解

    Python內建模塊struct實例詳解

    這篇文章主要介紹了Python內建模塊struct實例詳解,分享了相關代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • python 輸出上個月的月末日期實例

    python 輸出上個月的月末日期實例

    下面小編就為大家分享一篇python 輸出上個月的月末日期實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • Python使用Selenium獲取Web頁面信息的流程步驟

    Python使用Selenium獲取Web頁面信息的流程步驟

    在 Web 自動化測試和數據抓取中,獲取頁面信息是一個基本且重要的操作,通過 Selenium,您可以輕松地獲取頁面的各種信息,這些信息不僅可以用于驗證測試結果,還可以用于數據分析和處理,所以本文給大家介紹了Python使用Selenium獲取Web頁面信息的流程步驟
    2025-03-03
  • python實現簡易版計算器

    python實現簡易版計算器

    這篇文章主要為大家詳細介紹了python實現簡易版計算器,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Django中幾種重定向方法

    Django中幾種重定向方法

    這篇文章主要介紹了Django中幾種重定向方法,本文講解了使用HttpResponseRedirect、redirect、reverse以及配置文件中配置URL等方法,需要的朋友可以參考下
    2015-04-04
  • PyCharm的設置方法和第一個Python程序的建立

    PyCharm的設置方法和第一個Python程序的建立

    今天小編就為大家分享一篇PyCharm的設置方法和第一個Python程序的建立,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • Python Flask框架開發(fā)之運用SocketIO實現WebSSH方法詳解

    Python Flask框架開發(fā)之運用SocketIO實現WebSSH方法詳解

    Socket.IO本是一個面向實時web應用的JavaScript庫,現在已成為擁有眾多語言支持的Web即時通訊應用的框架。這篇文章主要介紹了Python 運用SocketIO實現WebSSH方法
    2022-10-10
  • Python使用monkey.patch_all()解決協(xié)程阻塞問題

    Python使用monkey.patch_all()解決協(xié)程阻塞問題

    這篇文章主要介紹了Python使用monkey.patch_all()解決協(xié)程阻塞問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • Pytorch中的數據轉換Transforms與DataLoader方式

    Pytorch中的數據轉換Transforms與DataLoader方式

    這篇文章主要介紹了Pytorch中的數據轉換Transforms與DataLoader方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 一次性徹底講透Python中pd.concat與pd.merge

    一次性徹底講透Python中pd.concat與pd.merge

    本文主要介紹了一次性徹底講透Python中pd.concat與pd.merge,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06

最新評論

玉林市| 张北县| 涪陵区| 开化县| 新乐市| 会昌县| 顺义区| 穆棱市| 定结县| 唐河县| 十堰市| 田林县| 河北区| 元氏县| 清河县| 肇州县| 潞城市| 常山县| 迁安市| 昌江| 南陵县| 四平市| 佛学| 长宁县| 安远县| 普兰店市| 惠来县| 永修县| 安西县| 巴中市| 兰西县| 汽车| 海原县| 台山市| 招远市| 仁布县| 南溪县| 沙田区| 襄城县| 定日县| 玛曲县|