python3property裝飾器實(shí)現(xiàn)原理與用法示例-創(chuàng)新互聯(lián)

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

創(chuàng)新互聯(lián)是專業(yè)的上海網(wǎng)站建設(shè)公司,上海接單;提供網(wǎng)站制作、成都網(wǎng)站制作,網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行上海網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊,希望更多企業(yè)前來合作!

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

property的意義

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

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

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

類屬性實(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)

當(dāng)前名稱:python3property裝飾器實(shí)現(xiàn)原理與用法示例-創(chuàng)新互聯(lián)
網(wǎng)頁鏈接:http://muchs.cn/article6/doddog.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、網(wǎng)站內(nèi)鏈、移動網(wǎng)站建設(shè)、外貿(mào)建站、動態(tài)網(wǎng)站、軟件開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司