亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

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

系統(tǒng) 1524 0

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

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

property的意義

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

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

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

類(lèi)屬性實(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)容可查看本站專(zhuān)題:《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python Socket編程技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門(mén)與進(jìn)階經(jīng)典教程》

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


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 亚洲一区二区三区高清 不卡 | 一级无毛片 | 久久午夜夜伦伦鲁鲁片 | 久久怡红院国产精品 | 欧美精品成人 | 久久99一区 | 国产自愉怕一区二区三区 | 天天操天天射天天操 | 欧美久久久久久久一区二区三区 | 欧美13一14周岁a在线播放 | 欧做爰xxxⅹ性欧美大片孕妇 | 一级毛片不卡片免费观看 | 欧美一级免费看 | 欧美久久天天综合香蕉伊 | 男人天堂视频在线 | 狠狠色丁香久久婷婷综合五月 | 最新91视频| 久久国产乱子伦精品免费不卡 | 四虎影院在线播放 | 久久99国产亚洲精品观看 | 欧美与黑人午夜性猛交久久久 | 免费大片黄在线观看yw | 九九精品在线观看 | 成人免费视频视频在线不卡 | 黄色录像欧美 | 91精品久久久久久久久久 | 国产精品久久久久久久免费 | 7799国产精品久久久久99 | 欧美日韩中文一区 | 337p日本大胆欧洲色噜噜高清 | 波多野结衣久久一区二区 | 很黄的网站在线观看 | 免费一级欧美大片视频在线 | 中文字幕在线高清 | 欧美日韩久久毛片 | 中文字幕亚洲精品久久 | 99九九精品免费视频观看 | 国产天天射 | 一级毛片高清 | 午夜影视在线 | 综合久久伊人 |