欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python面向?qū)ο笾瓷?自省機(jī)制實(shí)例分析

 更新時間:2018年08月24日 09:10:57   作者:小清新  
這篇文章主要介紹了Python面向?qū)ο笾瓷?自省機(jī)制,結(jié)合實(shí)例形式分析了Python面向?qū)ο蟪绦蛟O(shè)計(jì)中的反射/自省機(jī)制概念、原理及相關(guān)屬性操作技巧,需要的朋友可以參考下

本文實(shí)例講述了Python面向?qū)ο笾瓷?自省機(jī)制。分享給大家供大家參考,具體如下:

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

下面就介紹四種實(shí)現(xiàn)自省的函數(shù),適用于類和對象

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

hasattr(object,name)

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

getattr(object,name,default= None)

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

setattr(object,name,value)

4. 刪除object中name字符串對應(yīng)的屬性。

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','該屬性不存在'))
#設(shè)置數(shù)據(jù)屬性和方法屬性
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__)

運(yùn)行結(jié)果:

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í)行,實(shí)現(xiàn)了即插即用,也就是一種后期綁定,即先定義接口,后期在實(shí)現(xiàn)接口的功能。

B還沒有實(shí)現(xiàn)的全部功能

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

A后期的代碼編寫

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

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python面向?qū)ο蟪绦蛟O(shè)計(jì)入門與進(jìn)階教程》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python編碼操作技巧總結(jié)》及《Python入門與進(jìn)階經(jīng)典教程

希望本文所述對大家Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • Flask框架中密碼的加鹽哈希加密和驗(yàn)證功能的用法詳解

    Flask框架中密碼的加鹽哈希加密和驗(yàn)證功能的用法詳解

    加鹽加密就是在加密時混入一段隨機(jī)字符串,這段字符串便被稱為"鹽值",這里我們來看一下Python的Flask框架中密碼的加鹽哈希加密和驗(yàn)證功能的用法詳解:
    2016-06-06
  • python?spotlight庫簡化交互式方法探索數(shù)據(jù)分析

    python?spotlight庫簡化交互式方法探索數(shù)據(jù)分析

    這篇文章主要為大家介紹了python?spotlight庫簡化的交互式方法探索數(shù)據(jù),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • 一文帶你搞懂Python中的描述符(Descriptor)

    一文帶你搞懂Python中的描述符(Descriptor)

    Python是一種動態(tài)類型語言,這意味著我們可以在運(yùn)行時更改對象的結(jié)構(gòu),這種靈活性有時可能會導(dǎo)致問題,例如我們可能無意中改變了一個屬性的值,為了解決這些問題,Python提供了一個強(qiáng)大的特性:描述符,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • Python調(diào)用API接口實(shí)現(xiàn)人臉識別

    Python調(diào)用API接口實(shí)現(xiàn)人臉識別

    本文主要介紹了Python調(diào)用API接口實(shí)現(xiàn)人臉識別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • Python 轉(zhuǎn)換RGB顏色值的示例代碼

    Python 轉(zhuǎn)換RGB顏色值的示例代碼

    這篇文章主要介紹了Python 轉(zhuǎn)換RGB顏色值的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Python字典dict常用方法函數(shù)實(shí)例

    Python字典dict常用方法函數(shù)實(shí)例

    這篇文章主要介紹了Python字典dict常用方法函數(shù)實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-11-11
  • python打包exe開機(jī)自動啟動的實(shí)例(windows)

    python打包exe開機(jī)自動啟動的實(shí)例(windows)

    今天小編就為大家分享一篇python打包exe開機(jī)自動啟動的實(shí)例(windows),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • python 編碼中為什么要寫類型注解?

    python 編碼中為什么要寫類型注解?

    這篇文章主要介紹了python 編碼中為什么要寫類型注解,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-03-03
  • Python如何進(jìn)行時間處理

    Python如何進(jìn)行時間處理

    這篇文章主要介紹了Python如何進(jìn)行時間處理,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-08-08
  • Python實(shí)現(xiàn)字典的遍歷與排序功能示例

    Python實(shí)現(xiàn)字典的遍歷與排序功能示例

    這篇文章主要介紹了Python實(shí)現(xiàn)字典的遍歷與排序功能,結(jié)合實(shí)例形式分析了Python字典的遍歷與排序相關(guān)函數(shù)與使用技巧,需要的朋友可以參考下
    2017-12-12

最新評論