裝載!!!!!!!至csdn博主 peace & love的《對於python中@property的理解和使用》,**:
重看狗書,看到對user表定義的時候有下面兩行
@property
defpassword
(self)
:raise attributeerror(
'password is not a readable attribute'
) @password.setter
defpassword
(self, password)
: self.password_hash = generate_password_hash(password)
遂重溫下這個property的使用
在我們定義資料庫欄位類的時候,往往需要對其中的類屬性做一些限制,一般用get和set方法來寫,那在python中,我們該怎麼做能夠少寫**,又能優雅的實現想要的限制,減少錯誤的發生呢,這時候就需要我們的@property閃亮登場啦,巴拉巴拉能量………
用**來舉例子更容易理解,比如乙個學生成績表定義成這樣
class
student
(object):
defget_score
(self)
:return self._score
defset_score
(self, value):if
notisinstance
(value,
int)
:raise valueerror(
'score must be an integer!'
)if value <
0or value >
100:
raise valueerror(
'score must between 0 ~ 100!'
) self._score = value
我們呼叫的時候需要這麼呼叫:
>>
> s = student(
)>>
> s.set_score(60)
# ok!
>>
> s.get_score()60
>>
> s.set_score(
9999
)traceback (most recent call last):.
..valueerror: score must between 0
~100!
但是為了方便,節省時間,我們不想寫s.set_score(9999)啊,直接寫s.score = 9999不是更快麼,加了方法做限制不能讓呼叫的時候變麻煩啊,@property快來幫忙….
class
student
(object):
@property
defscore
(self)
:return self._score
@score.setter
defscore
(self,value):if
notisinstance
(value,
int)
:raise valueerror(
'分數必須是整數才行吶'
)if value <
0or value >
100:
raise valueerror(
'分數必須0-100之間'
) self._score = value
看上面**可知,把get方法變為屬性只需要加上@property裝飾器即可,此時**@property本身又會建立另外乙個裝飾器@score.setter,負責把set方法變成給屬性賦值**,這麼做完後,我們呼叫起來既可控又方便
>>
> s = student(
)>>
> s.score =
60# ok,實際轉化為s.set_score(60)
>>
> s.score # ok,實際轉化為s.get_score()
60>>
> s.score =
9999
traceback (most recent call last):.
..valueerror: score must between 0
~100!
一文帶你搞懂python中的property
通常我們在獲得變數的一些私有屬性時,必須通過方法來獲取私有屬性,並不能直接訪問 修改其數值的時候也是要通過方法去修改,這樣非常的不方便 所以python提供了一種方式,將呼叫方法的的形式轉變為訪問屬性,這樣使用非常方便 class student def init self 這是乙個私有屬性 sel...
對於Python中 property的理解和使用
2017年09月02日 22 03 22 重看狗書,看到對user表定義的時候有下面兩行 property def password self raise attributeerror password is not a readable attribute password.setter def ...
對於Python中 property的理解和使用
property 這個我們在很多 中都會用到,簡單講即為乙個唯讀屬性的呼叫 如果需要有修改許可權,需要再加乙個 屬性名.setter 例 usr bin env python coding utf 8 property 示例class student object propertydef score...