Python @property原理解析和用法實(shí)例
這篇文章主要介紹了Python @property原理解析和用法實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
在我們定義數(shù)據(jù)庫(kù)字段類的時(shí)候,往往需要對(duì)其中的類屬性做一些限制,一般用get和set方法來(lái)寫(xiě),那在python中,我們?cè)撛趺醋瞿軌蛏賹?xiě)代碼,又能優(yōu)雅的實(shí)現(xiàn)想要的限制,減少錯(cuò)誤的發(fā)生呢,這時(shí)候就需要我們的@property閃亮登場(chǎng)啦,巴拉巴拉能量……..
用代碼來(lái)舉例子更容易理解,比如一個(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í)間,我們不想寫(xiě)s.set_score(9999)啊,直接寫(xiě)s.score = 9999不是更快么,加了方法做限制不能讓調(diào)用的時(shí)候變麻煩啊,@property快來(lái)幫忙….
class Student(object): @property def score(self): return self._score @score.setter #@score.setter是前一個(gè)@property裝飾后的副產(chǎn)品。 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)閷傩灾恍枰由螥property裝飾器即可,此時(shí)@property本身又會(huì)創(chuàng)建另外一個(gè)裝飾器@score.setter,負(fù)責(zé)把set方法變成給屬性賦值,這么做完后,我們調(diào)用起來(lái)既可控又方便
>>> 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!
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
解決Opencv+Python cv2.imshow閃退問(wèn)題
這篇文章主要介紹了解決Opencv+Python cv2.imshow閃退問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04Python爬蟲(chóng)常用小技巧之設(shè)置代理IP
這篇文章主要給大家介紹了關(guān)于Python爬蟲(chóng)常用小技巧之設(shè)置代理IP的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-09-09對(duì)python中GUI,Label和Button的實(shí)例詳解
今天小編就為大家分享一篇對(duì)python中GUI,Label和Button的實(shí)例詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06JAVA及PYTHON質(zhì)數(shù)計(jì)算代碼對(duì)比解析
這篇文章主要介紹了JAVA及PYTHON質(zhì)數(shù)計(jì)算代碼對(duì)比,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06Python中xmltodict模塊對(duì)XML的用法詳解
這篇文章主要介紹了Python中xmltodict模塊對(duì)XML的用法詳解,xmltodict?是一個(gè)用來(lái)處理xml數(shù)據(jù)的很方便的模塊,包含兩個(gè)常用方法parse和unparse,本文通過(guò)代碼介紹了用法,需要的朋友可以參考下2023-07-07Python實(shí)戰(zhàn)之利用Geopandas算出每個(gè)省面積
GeoPandas是一個(gè)基于pandas,針對(duì)地理數(shù)據(jù)做了特別支持的第三方模塊。本文將利用GeoPandas計(jì)算出每個(gè)省的面積,感興趣的小伙伴快跟隨小編一起學(xué)習(xí)一下吧2021-12-12