對於Python中 property的理解和使用

2021-10-05 08:59:32 字數 2338 閱讀 1259

裝載!!!!!!!至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...