通過(guò)實(shí)例解析python描述符原理作用
這篇文章主要介紹了通過(guò)實(shí)例解析python描述符原理作用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
本質(zhì)上看,描述符是一個(gè)類,只不過(guò)它定義了另一個(gè)類中屬性的訪問(wèn)方式。換句話說(shuō),一個(gè)類可以將屬性管理全權(quán)委托給描述符類。
描述符類基于以下三種特殊方法,換句話說(shuō),這三種方法組成了描述符協(xié)議:
- __set__(self, obj, type = None): 在設(shè)置屬性時(shí),將調(diào)用這一方法。
- __get__(self, obj, value): 在讀取屬性時(shí)將調(diào)用這一方法。
- __delete__(self, obj): 對(duì)屬性調(diào)用del時(shí)將調(diào)用這一方法。
其中,實(shí)現(xiàn)了setter和getter方法的描述符被稱為數(shù)據(jù)描述符,反之,如果只實(shí)現(xiàn)了getter方法,則稱為非數(shù)據(jù)描述符。
#描述符類
class revealAccess:
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:
x = revelAccess(10, 'var "x"')
y = 5
m = myClass()
print(m.x)
m.x = 20
print(m.x)
print(m.y)
Retrieving var "x" 10 updating var "x" Retrieving var "x" 20 5
如果一個(gè)類的某個(gè)屬性有數(shù)據(jù)描述符,那么每次查找這個(gè)屬性時(shí),都會(huì)調(diào)用描述符的__get__()方法,并返回它的值;同樣,每次在對(duì)屬性賦值時(shí),也會(huì)調(diào)用__set__()方法。
當(dāng)每次使用del類對(duì)象.屬性(或者delattr(類對(duì)象,屬性))語(yǔ)句時(shí),都會(huì)調(diào)用該方法。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Python descriptor(描述符)的實(shí)現(xiàn)
- Python描述符descriptor使用原理解析
- python實(shí)現(xiàn)裝飾器、描述符
- Python 描述符(Descriptor)入門
- Python中屬性和描述符的正確使用
- 詳解Python中的Descriptor描述符類
- Python黑魔法Descriptor描述符的實(shí)例解析
- Python中的Descriptor描述符學(xué)習(xí)教程
- Python 的描述符 descriptor詳解
- 解密Python中的描述符(descriptor)
- Python中的類與對(duì)象之描述符詳解
- python的描述符(descriptor)、裝飾器(property)造成的一個(gè)無(wú)限遞歸問(wèn)題分享
- Python基礎(chǔ)詳解之描述符
相關(guān)文章
如何解決pycharm中用matplotlib畫(huà)圖不顯示中文的問(wèn)題
這篇文章主要介紹了如何解決pycharm中用matplotlib畫(huà)圖不顯示中文的問(wèn)題,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下2022-06-06
python模塊hashlib(加密服務(wù))知識(shí)點(diǎn)講解
在本篇文章里小編給大家分享的是關(guān)于python模塊hashlib(加密服務(wù))知識(shí)點(diǎn)內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。2019-11-11
關(guān)于Python3的import問(wèn)題(pycharm可以運(yùn)行命令行import錯(cuò)誤)
這篇文章主要介紹了關(guān)于Python3的import問(wèn)題(pycharm可以運(yùn)行命令行import錯(cuò)誤),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
DataFrame 將某列數(shù)據(jù)轉(zhuǎn)為數(shù)組的方法
下面小編就為大家分享一篇DataFrame 將某列數(shù)據(jù)轉(zhuǎn)為數(shù)組的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-04-04
Python PyQt5模塊實(shí)現(xiàn)一個(gè)瀏覽器的示例代碼
在項(xiàng)目開(kāi)發(fā)中,有的應(yīng)用程序可以運(yùn)行在web瀏覽器,本文主要介紹了Python PyQt5模塊實(shí)現(xiàn)一個(gè)瀏覽器的示例代碼,分享給大家,感興趣的可以了解一下2021-07-07

