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

輕松理解Python 中的 descriptor

 更新時間:2017年09月15日 09:31:32   投稿:mrr  
本文給大家分Python 中的 descriptor相關(guān)知識,非常不錯,具有參考借鑒價值,需要的朋友參考下吧

定義

通常,一個 descriptor 是具有“綁定行為”的對象屬性。所綁定行為可通過 descriptor 協(xié)議被自定義的 __get__() , __set__() 和 __delete__() 方法重寫。如果一個對象的上述三個方法任意一個被重寫,則就可被稱為 descriptor。

屬性的默認(rèn)操作是從對象字典中獲取、設(shè)置和刪除一個屬性。例如,a.x 有一個查找鏈,先 a.__dict__['x'] ,若沒有則 type(a).__dict__['x'] ,若沒有增往上查找父類直到元類。如果查找鏈中,對象被定義了 descriptor 方法,Python 就會覆蓋默認(rèn)行為。

Descriptor 是一個強(qiáng)大的工具,雖然開發(fā)者不常接觸到它,但它其實就是類、屬性、函數(shù)、方法、靜態(tài)方法、類方法以及 super() 背后的運行機(jī)制。

Descriptor 協(xié)議

三個方法原型如下所示:

descr.__get__(self, obj, type=None) --> value
descr.__set__(self, obj, value) --> None
descr.__delete__(self, obj) --> None

數(shù)據(jù) descriptor 是同時具有 __get__() 和 __set__() 方法的對象,若只有 __get__() 方法,則為非數(shù)據(jù) descriptor。如果實例字典中有和數(shù)據(jù) descriptor 同名的入口,則數(shù)據(jù) descriptor 優(yōu)先級更高。相反,非數(shù)據(jù) descriptor 優(yōu)先級低。

讓 __set__() 方法拋出異常,就能創(chuàng)建一個只讀數(shù)據(jù) descriptor。

調(diào)用 descriptor

descriptor 可以直接通過方法名調(diào)用。例如, d.__get__(obj) 。

而通過訪問對象屬性,自動調(diào)用 descriptor 才是更通用的做法。例如,如果 d 定義了方法 __get__() ,則 obj.d 會調(diào)用 d.__get__(obj) 。

對于對象, b.x 會被轉(zhuǎn)換成 type(b).__dict__['x'].__get__(b, type(b)) 。而對于類(是的,類也可以調(diào)用), B.x 會被轉(zhuǎn)換成 B.__dict__['x'].__get__(None, B) 。

Descriptor 例子

class RevealAccess(object):
  """A data descriptor that sets and returns values
    normally and prints a message logging their access.
  """
  def __init__(self, initval=None, name='var'):
    self.val = initval
    self.name = name
  def __get__(self, obj, objtype):
    print('Retrieving', self.name)
    return self.val
  def __set__(self, obj, val):
    print('Updating', self.name)
    self.val = val
>>> class MyClass(object):
...   x = RevealAccess(10, 'var "x"')
...   y = 5
...
>>> m = MyClass()
>>> m.x
Retrieving var "x"
10
>>> m.x = 20
Updating var "x"
>>> m.x
Retrieving var "x"
20
>>> m.y
5

總結(jié)

以上所述是小編給大家介紹的Python 中的 descriptor,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Python使用PyPDF2?Pillow庫來將PDF文件轉(zhuǎn)圖片

    Python使用PyPDF2?Pillow庫來將PDF文件轉(zhuǎn)圖片

    這篇文章主要為大家介紹了Python使用PyPDF2?Pillow庫來將PDF文件轉(zhuǎn)圖片示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • python爬取youtube視頻的示例代碼

    python爬取youtube視頻的示例代碼

    這篇文章主要介紹了python爬取youtube視頻的相關(guān)知識,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • Python中新式類與經(jīng)典類的區(qū)別詳析

    Python中新式類與經(jīng)典類的區(qū)別詳析

    這篇文章主要給大家介紹了關(guān)于Python中新式類與經(jīng)典類的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Django單元測試中Fixtures的使用方法

    Django單元測試中Fixtures的使用方法

    這篇文章主要介紹了Django單元測試中Fixtures用法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • python實現(xiàn)外賣信息管理系統(tǒng)

    python實現(xiàn)外賣信息管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了python實現(xiàn)外賣信息管理系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • python dict remove數(shù)組刪除(del,pop)

    python dict remove數(shù)組刪除(del,pop)

    我們在用數(shù)組列表做刪除的時候,可能選擇2個方法,一個是del,一個是pop方法
    2013-03-03
  • 詳解pyppeteer(python版puppeteer)基本使用

    詳解pyppeteer(python版puppeteer)基本使用

    這篇文章主要介紹了詳解pyppeteer(python版puppeteer)基本使用 ,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • 用Python爬取指定關(guān)鍵詞的微博

    用Python爬取指定關(guān)鍵詞的微博

    這篇文章主要介紹了用Python爬取指定關(guān)鍵詞的微博,下面文章圍繞Python爬取指定關(guān)鍵詞的微博的相關(guān)資料展開詳細(xì)內(nèi)容,需要的朋友可以參考一下
    2021-11-11
  • Python實戰(zhàn)之大魚吃小魚游戲的實現(xiàn)

    Python實戰(zhàn)之大魚吃小魚游戲的實現(xiàn)

    這篇文章主要介紹了如何利用Python制作一個經(jīng)典游戲之大魚吃小魚,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Python有一定幫助,需要的可以參考一下
    2022-04-04
  • OpenCV學(xué)習(xí)之圖像的分割與修復(fù)詳解

    OpenCV學(xué)習(xí)之圖像的分割與修復(fù)詳解

    圖像分割本質(zhì)就是將前景目標(biāo)從背景中分離出來。在當(dāng)前的實際項目中,應(yīng)用傳統(tǒng)分割的并不多,大多是采用深度學(xué)習(xí)的方法以達(dá)到更好的效果。本文將詳細(xì)介紹一下OpenCV中的圖像分割與修復(fù),需要的可以參考一下
    2022-01-01

最新評論