Python中@property的理解和使用示例
本文實(shí)例講述了Python中@property的理解和使用。分享給大家供大家參考,具體如下:
重看狗書,看到對(duì)User表定義的時(shí)候有下面兩行
@property
def password(self):
raise AttributeError('password is not a readable attribute')
@password.setter
def password(self, password):
self.password_hash = generate_password_hash(password)
遂重溫下這個(gè)property的使用
在我們定義數(shù)據(jù)庫字段類的時(shí)候,往往需要對(duì)其中的類屬性做一些限制,一般用get和set方法來寫,那在python中,我們?cè)撛趺醋瞿軌蛏賹懘a,又能優(yōu)雅的實(shí)現(xiàn)想要的限制,減少錯(cuò)誤的發(fā)生呢,這時(shí)候就需要我們的@property閃亮登場(chǎng)啦,巴拉巴拉能量……..
用代碼來舉例子更容易理解,比如一個(gè)學(xué)生成績(jī)表定義成這樣
class Student(object):
def get_score(self):
return self._score
def set_score(self, value):
if not isinstance(value, int):
raise ValueError('score must be an integer!')
if value < 0 or value > 100:
raise ValueError('score must between 0 ~ 100!')
self._score = value
我們調(diào)用的時(shí)候需要這么調(diào)用:
>>> 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!
但是為了方便,節(jié)省時(shí)間,我們不想寫s.set_score(9999)啊,直接寫s.score = 9999不是更快么,加了方法做限制不能讓調(diào)用的時(shí)候變麻煩啊,@property快來幫忙….
class Student(object):
@property
def score(self):
return self._score
@score.setter
def score(self,value):
if not isinstance(value, int):
raise ValueError('分?jǐn)?shù)必須是整數(shù)才行吶')
if value < 0 or value > 100:
raise ValueError('分?jǐn)?shù)必須0-100之間')
self._score = value
看上面代碼可知,把get方法變?yōu)閷傩灾恍枰由?code>@property裝飾器即可,此時(shí)@property本身又會(huì)創(chuàng)建另外一個(gè)裝飾器@score.setter,負(fù)責(zé)把set方法變成給屬性賦值,這么做完后,我們調(diào)用起來既可控又方便
>>> s = Student() >>> s.score = 60 # OK,實(shí)際轉(zhuǎn)化為s.set_score(60) >>> s.score # OK,實(shí)際轉(zhuǎn)化為s.get_score() 60 >>> s.score = 9999 Traceback (most recent call last): ... ValueError: score must between 0 ~ 100!
更多關(guān)于Python相關(guān)內(nèi)容可查看本站專題:《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python Socket編程技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門與進(jìn)階經(jīng)典教程》
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
相關(guān)文章
pdf論文中python畫的圖Type 3 fonts字體不兼容的解決方案
這篇文章主要介紹了pdf論文中python畫的圖Type 3 fonts字體不兼容的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-04-04
python爬蟲簡(jiǎn)單的添加代理進(jìn)行訪問的實(shí)現(xiàn)代碼
本文通過實(shí)例代碼給大家介紹了python爬蟲簡(jiǎn)單的添加代理進(jìn)行訪問,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-04-04
python實(shí)現(xiàn)將list拼接為一個(gè)字符串
這篇文章主要介紹了python實(shí)現(xiàn)將list拼接為一個(gè)字符串方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11
Python實(shí)現(xiàn)Windows上氣泡提醒效果的方法
這篇文章主要介紹了Python實(shí)現(xiàn)Windows上氣泡提醒效果的方法,涉及Python針對(duì)windows窗口操作的相關(guān)技巧,需要的朋友可以參考下2015-06-06
Python實(shí)現(xiàn)將通信達(dá).day文件讀取為DataFrame
今天小編就為大家分享一篇Python實(shí)現(xiàn)將通信達(dá).day文件讀取為DataFrame,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-12-12
在Mac中PyCharm配置python Anaconda環(huán)境過程圖解
這篇文章主要介紹了在Mac中PyCharm配置python Anaconda環(huán)境過程圖解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03

