property的理解和例項

2021-10-03 18:45:09 字數 1317 閱讀 9272

python中有裝飾器的概念,@property是裝飾器的一種。

以下面的例子進行說明:

私有屬性以雙下劃線__開頭:外部不可通過instance.property來訪問或者更改。如果一定要,可以通過setname(),getname()等方法實現,可是這樣不簡潔。

但是,使用@property可以優雅的對私有屬性 __amt 進行訪問。

acc.amount
使用@amount.setter可以優雅的對私有屬性 __amt 進行更改。還能擴充套件功能,比如增加過濾條件。

acc.amount =

20

#!/usr/bin/env python3

class

account

(object):

"""賬號類,

amount 是美元金額.

"""def__init__

(self, rate)

: self.__amt =

0 self.rate = rate

@property

defamount

(self)

:"""賬號餘額(美元)"""

return self.__amt

@property

defcny

(self)

:"""賬號餘額(人民幣)"""

return self.__amt * self.rate

@amount.setter

defamount

(self, value)

:if value <0:

print

("sorry, no negative amount in the account."

)return

self.__amt = value

if __name__ ==

'__main__'

: acc = account(rate=

6.6)

# 基於編寫時的匯率

acc.amount =

20print

("dollar amount:"

, acc.amount)

print

("in cny:"

, acc.cny)

acc.amount =

-100

print

("dollar amount:"

, acc.amount)

如和快速理解property

一種用起來像是使用的例項屬性一樣的特殊屬性,可以對應於某個方法,通過使用property屬性,能夠簡化呼叫者在獲取資料的流程。定義時,在例項方法的基礎上新增 property 裝飾器 並且僅有乙個self引數 呼叫時,無需括號,加上就錯了 經典類中的屬性只有一種訪問方式,其對應被 property ...

Property和例項變數(Ivar)的最佳實踐

property應該代表乙個物件的狀態,getter應該沒有外部影響 它們可以具有內部影響,例如caching,但那些應該是呼叫者不可見的 避免直接訪問例項變數,使用accessor來代替。在早期的arc裡,引起bug最常見的原因就是直接訪問例項變數。開發者沒有正確的retain和release例項...

關於OC的property 和 例項變數思考

區別一 property的是可以被外部訪問的,當然也可以定義私有的property,但是例項變數,外部是不可訪問的。所以當我們的變數需要給外部訪問的時候,可以定義property。區別二我們需要儲存我們的資料,不要被提前dealloc的時候,可以使用property的setter,來retain多一...