亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python3 property裝飾器實現原理與用法示例

發布時間:2020-10-23 02:47:36 來源:腳本之家 閱讀:246 作者:心晴文遠 欄目:開發技術

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

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

property的意義

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

實現很簡單,那么它背后的原理是什么呢?

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

類屬性實現方式:

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)

裝飾器實現方式:

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

更多關于Python相關內容可查看本站專題:《Python數據結構與算法教程》、《Python Socket編程技巧總結》、《Python函數使用技巧總結》、《Python字符串操作技巧匯總》及《Python入門與進階經典教程》

希望本文所述對大家Python程序設計有所幫助。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

合水县| 古丈县| 双辽市| 岳阳市| 余姚市| 本溪市| 依安县| 新和县| 北碚区| 鹤峰县| 长岭县| 丹东市| 大渡口区| 五莲县| 河间市| 沈丘县| 湾仔区| 尉氏县| 汉源县| 长治县| 安达市| 双桥区| 武胜县| 皋兰县| 定兴县| 穆棱市| 建德市| 响水县| 永修县| 双鸭山市| 呼玛县| 阳曲县| 延川县| 岗巴县| 巴南区| 龙南县| 临汾市| 瑞丽市| 穆棱市| 当雄县| 突泉县|