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

python3 property裝飾器實(shí)現(xiàn)原理與用法示例

 更新時(shí)間:2019年05月15日 11:55:49   作者:心晴文遠(yuǎn)  
這篇文章主要介紹了python3 property裝飾器實(shí)現(xiàn)原理與用法,結(jié)合實(shí)例形式分析了Python3 property裝飾器功能、原理及實(shí)現(xiàn)方法,需要的朋友可以參考下

本文實(shí)例講述了python3 property裝飾器實(shí)現(xiàn)原理與用法。分享給大家供大家參考,具體如下:

學(xué)習(xí)python的同學(xué),慢慢的都會(huì)接觸到裝飾器,裝飾器在python里是功能強(qiáng)大的語(yǔ)法。裝飾器配合python的魔法方法,能實(shí)現(xiàn)很多意想不到的功能。廢話不多說(shuō),如果你已經(jīng)掌握了閉包的原理,代碼的邏輯還是可以看明白的,咱們直接進(jìn)入正題。

property的意義

@property把一個(gè)類的getter方法變成屬性,如果還有setter方法,就在setter方法前面加上@method.setter。使用類屬性=property(getx,setx,delx,desc)也是可以的。

實(shí)現(xiàn)很簡(jiǎn)單,那么它背后的原理是什么呢?

Property類的偽代碼如下,里面涉及了__get__、__set__、__delete__魔法方法。Decorator類是裝飾器類,Target是目標(biāo)類。當(dāng)你設(shè)置裝飾器類的實(shí)例對(duì)象為目標(biāo)類的x屬性后,當(dāng)試圖訪問(wèn)目標(biāo)類的x屬性會(huì)觸發(fā)裝飾器類的__get__方法;當(dāng)為目標(biāo)類的x屬性賦值時(shí),會(huì)觸發(fā)裝飾器類的__setter__方法;嘗試刪除目標(biāo)類的x屬性時(shí),會(huì)觸發(fā)裝飾器類的__delete__方法。當(dāng)訪問(wèn)Target.x.__doc__,可以打印出裝飾器類的描述文檔。事實(shí)上這種裝飾器類也被稱為描述符類。描述符類就是將一個(gè)特殊類的實(shí)例指派給一個(gè)類的屬性。

類屬性實(shí)現(xiàn)方式:

class Decorator(object):
  def __init__(self, fget=None, fset=None, fdel=None, doc=None):
    self.fget = fget
    self.fset = fset
    self.fdel = fdel
    self.__doc__ = doc
  def __get__(self, instance, owner):
    if instance is None:
      return self
    return self.fget(instance)
  def __set__(self, instance, value):
    self.fset(instance, value)
  def __delete__(self, instance):
    self.fdel(instance)
  def getter(self, fget):
    return Decorator(fget, self.fset, self.fdel, self.__doc__)
  def setter(self, fset):
    return Decorator(self.fget, fset, self.fdel, self.__doc__)
  def deleter(self, fdel):
    return Decorator(self.fget, self.fset, fdel, self.__doc__)
class Target(object):
  desc = "Amazing pyhton"
  def __init__(self, attr=5):
    self._x = attr
  def getx(self):
    return self._x
  def setx(self, value):
    self._x = value
  def delx(self):
    del self._x
  x = Decorator(getx,setx,delx,desc)

裝飾器實(shí)現(xiàn)方式:

class Decorator(object):
  def __init__(self, fget=None, fset=None, fdel=None, doc=None):
    self.fget = fget
    self.fset = fset
    self.fdel = fdel
    self.__doc__ = doc
  def __get__(self, instance, owner):
    if instance is None:
      return self
    return self.fget(instance)
  def __set__(self, instance, value):
    self.fset(instance, value)
  def __delete__(self, instance):
    self.fdel(instance)
  def getter(self, fget):
    return Decorator(fget, self.fset, self.fdel, self.__doc__)
  def setter(self, fset):
    return Decorator(self.fget, fset, self.fdel, self.__doc__)
  def deleter(self, fdel):
    return Decorator(self.fget, self.fset, fdel, self.__doc__)
class Target(object):
  desc = "Amazing pyhton"
  def __init__(self, attr=5):
    self._x = attr
  @Decorator
  def show(self):
    return self._x
  @show.setter
  def show(self, value):
    self._x = value
  @show.deleter
  def show(self):
    del self._x

更多關(guān)于Python相關(guān)內(nèi)容可查看本站專題:《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python Socket編程技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門與進(jìn)階經(jīng)典教程

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

相關(guān)文章

  • Python + Chrome抓取AJAX動(dòng)態(tài)數(shù)據(jù)的兩種方法

    Python + Chrome抓取AJAX動(dòng)態(tài)數(shù)據(jù)的兩種方法

    在現(xiàn)代 Web 開(kāi)發(fā)中,AJAX技術(shù)被廣泛應(yīng)用于動(dòng)態(tài)加載數(shù)據(jù),使得網(wǎng)頁(yè)能夠在不刷新的情況下更新內(nèi)容,本文將詳細(xì)介紹 Python + Chrome 如何抓取 AJAX 動(dòng)態(tài)數(shù)據(jù),并提供兩種方法的完整實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2025-04-04
  • python內(nèi)置函數(shù)anext的具體使用

    python內(nèi)置函數(shù)anext的具體使用

    本文主要介紹了python內(nèi)置函數(shù)anext的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • 深入理解Python內(nèi)置函數(shù)eval的使用

    深入理解Python內(nèi)置函數(shù)eval的使用

    在Python中,eval函數(shù)是一個(gè)內(nèi)置函數(shù),用于將字符串解析并執(zhí)行為Python表達(dá)式,本文將詳細(xì)介紹eval函數(shù)的使用方法和注意事項(xiàng),需要的可以參考一下
    2023-06-06
  • Window環(huán)境下Scrapy開(kāi)發(fā)環(huán)境搭建

    Window環(huán)境下Scrapy開(kāi)發(fā)環(huán)境搭建

    這篇文章主要介紹了Window環(huán)境下Scrapy開(kāi)發(fā)環(huán)境搭建,需要的朋友可以參考下
    2018-11-11
  • Python階乘求和的代碼詳解

    Python階乘求和的代碼詳解

    在本篇文章里小編給大家整理的是關(guān)于Python階乘求和的代碼實(shí)例,有需要的朋友們可以跟著學(xué)習(xí)下。
    2020-02-02
  • python中的for循環(huán)

    python中的for循環(huán)

    Python for循環(huán)可以遍歷任何序列的項(xiàng)目,如一個(gè)列表或者一個(gè)字符串。這篇文章主要介紹了python的for循環(huán),需要的朋友可以參考下
    2018-09-09
  • 淺析python中的二元嵌套列表分組

    淺析python中的二元嵌套列表分組

    這篇文章主要來(lái)和大家一起討論一下Python中的二元嵌套列表,并將每個(gè)嵌套列表元素相對(duì)于其其他索引元素進(jìn)行分組,感興趣的小伙伴可以學(xué)習(xí)一下
    2023-09-09
  • Python排序方法中sort和sorted的區(qū)別詳解

    Python排序方法中sort和sorted的區(qū)別詳解

    在python中常用的排序函數(shù)就是sort()和sorted()這兩個(gè)函數(shù),使用 sort() 或內(nèi)建函數(shù) sorted() 對(duì)列表進(jìn)行排序,本文將詳細(xì)介紹sorted和sort兩者之間的區(qū)別,感興趣的可以了解一下
    2023-08-08
  • 淺談python正則的常用方法 覆蓋范圍70%以上

    淺談python正則的常用方法 覆蓋范圍70%以上

    這篇文章主要為大家詳細(xì)介紹了python正則的常用方法,覆蓋范圍70%以上,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • Mac 安裝 Python3.10 和 配置環(huán)境的詳細(xì)教程

    Mac 安裝 Python3.10 和 配置環(huán)境的詳細(xì)教程

    這篇文章主要介紹了Mac 安裝 Python3.10 和 配置環(huán)境,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-05-05

最新評(píng)論

扎兰屯市| 邹平县| 临夏县| 侯马市| 恩施市| 河源市| 慈溪市| 罗城| 新丰县| 德保县| 温州市| 平舆县| 河曲县| 常德市| 西盟| 涿鹿县| 铁岭县| 衡山县| 怀柔区| 阳原县| 津南区| 庆安县| 广州市| 汝阳县| 巢湖市| 和田县| 文安县| 白银市| 抚顺县| 乌兰县| 沧州市| 天柱县| 武清区| 梁河县| 商河县| 双牌县| 崇明县| 绥中县| 共和县| 汉中市| 丹棱县|