class property([fget[, fset[, fdel[, doc]]]])
其中fget – 獲取屬性值的函式
fset – 設定屬性值的函式
fdel – 刪除屬性值函式
doc – 屬性描述資訊
property會返回乙個新式類屬性
classc(
object):
def__init__
(self)
: self._x =
none
defgetx
(self)
:return self._x
defsetx
(self, value)
: self._x = value
defdelx
(self)
:del self._x
x =property
(getx, setx, delx,
"i'm the 'x' property."
)
如果c是c的例項:
1.在property中,getx對應獲取屬性值的函式,也就是c.x的返回值
所以儘管x在c中是匿名的(_x),但還是可以被c.x呼叫
2.在property中,setx對應設定屬性值的函式,也就是c.x = value的返回值,所以儘管x在c中是匿名的,但還是可以被如此設定
3.同理,property中的第三個引數代表了刪除c屬性x的函式
我們可以看到,在沒有property時,我們是不能從外表呼叫._x
屬性的
反之,在property存在的情況下,我們是可以從外部呼叫x的,且之前定義的三個函式均起到了作用
我們先來看python builtins檔案中對類baseexception中引數args的定義
args =
property
(lambda self:
object()
,#獲取值
lambda self, v:
none
,#設定值
lambda self:
none
)#刪除值
顯然這裡的定義要比例一中的高明多了
我們白嫖一下這個定義,做個小實驗
發現這種方式確實是可行的,而且非常好
待更新
關於property引數的理解
之前對於property的引數,一直是弄得雲裡霧裡的,不知道這些引數到底有啥用,最近學了記憶體管理,算是對它有了一點理解,我也來總結一下把。推薦看這篇文章之前先了解一下記憶體管理的基本知識ios記憶體管理初認識 首先,引數分三類 原子性 atomic nonatomic 預設是atomic atom...
如和快速理解property
一種用起來像是使用的例項屬性一樣的特殊屬性,可以對應於某個方法,通過使用property屬性,能夠簡化呼叫者在獲取資料的流程。定義時,在例項方法的基礎上新增 property 裝飾器 並且僅有乙個self引數 呼叫時,無需括號,加上就錯了 經典類中的屬性只有一種訪問方式,其對應被 property ...
property的理解和例項
python中有裝飾器的概念,property是裝飾器的一種。以下面的例子進行說明 私有屬性以雙下劃線 開頭 外部不可通過instance.property來訪問或者更改。如果一定要,可以通過setname getname 等方法實現,可是這樣不簡潔。但是,使用 property可以優雅的對私有屬性...