了解Python 中的@property 裝飾器
在Python 中,@property 裝飾器允許您創建行為類似於常規實例屬性的屬性。但是,與帶有參數的內建屬性函數不同,@property 裝飾器不會明確接收任何參數。
工作原理
了解 @property 是如何工作的裝飾器可以工作,首先了解 property() 函數傳回一個描述符物件很重要。這是位於實例及其屬性之間的中介,允許應用附加邏輯。
描述符物件
屬性傳回的描述子物件( ) 函數有三個內建方法:
使用屬性
使用屬性class C: def __init__(self): self._x = None @property def x(self): """I'm the 'x' property.""" return self._x
使用屬性
使用屬性
@x.setter def x(self, value): self._x = value @x.deleter def x(self): del self._x
何時@property裝飾器應用於函數,它會傳回一個描述符物件並將其指派給屬性名稱。該物件保留了原始函數的 getter 函數,並包含兩個附加函數,分別委託給屬性的 setter 和 deleter 方法。
例如:
上面的程式碼建立了一個名為「x」的屬性可以檢索 self._x 的值,而無需任何明確屬性物件。 getter 函數由裝飾器自動建立。def x(self): return self._x x = property(x)
要加入 setter 和 deleter 方法,只需將 .setter 和 .deleter 附加到@property描述符對象,傳遞你想要的功能:
透過使用這些方法,你可以實現自訂設定和刪除屬性值的行為。class Property: 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, obj, objtype=None): if obj is None: return self if self.fget is None: raise AttributeError("unreadable attribute") return self.fget(obj)
以上是Python 的 @property 裝飾器如何建立屬性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!