網頁

2015年7月4日 星期六

[Python] property and descriptor protocol

主題: 了解property的概念

簡介: 

假設今天我們有一個需求,我們有一個A class:
a = A()
當寫 a.m 我們希望呼叫到 A.f
當寫 a.m = 3我們希望呼叫到 A.g
當寫 del a.m我們希望呼叫到A.p

那我們該如何實作 ?

答案在這邊 (直接參考property這個class的實作方式)

個人理解:

先說一下規則好了,如果一個有實作 "descriptor protocol"的class,假設叫D好了:
當寫 
d = D()
d  
d = 5
del d
則會觸發
__get__
__set__
__del__

據此,我們可以讓 __get__ 去呼叫A.f
__set__去呼叫A.g
__del__去呼叫A.p
就可以達到題目需求....

但這樣很不彈性,
因此我們再多寫三個function以便有機會可以替換掉
A.f
A.g
A.p

其實以上就是property的概念:
"
Property是一個class擁有fget, fset, fdel這三個function,
我們可以用 getter, setter, deleter去註冊這三個function,
且getter, setter, deleter回傳都是Proptery object。
"

沒有留言:

張貼留言