Python @property原理解析和用法實例
這篇文章主要介紹了Python @property原理解析和用法實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
在我們定義數(shù)據(jù)庫字段類的時候,往往需要對其中的類屬性做一些限制,一般用get和set方法來寫,那在python中,我們該怎么做能夠少寫代碼,又能優(yōu)雅的實現(xiàn)想要的限制,減少錯誤的發(fā)生呢,這時候就需要我們的@property閃亮登場啦,巴拉巴拉能量……..
用代碼來舉例子更容易理解,比如一個學生成績表定義成這樣
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)用的時候需要這么調(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é)省時間,我們不想寫s.set_score(9999)啊,直接寫s.score = 9999不是更快么,加了方法做限制不能讓調(diào)用的時候變麻煩啊,@property快來幫忙….
class Student(object):
@property
def score(self):
return self._score
@score.setter #@score.setter是前一個@property裝飾后的副產(chǎn)品。
def score(self,value):
if not isinstance(value, int):
raise ValueError('分數(shù)必須是整數(shù)才行吶')
if value < 0 or value > 100:
raise ValueError('分數(shù)必須0-100之間')
self._score = value
看上面代碼可知,把get方法變?yōu)閷傩灾恍枰由螥property裝飾器即可,此時@property本身又會創(chuàng)建另外一個裝飾器@score.setter,負責把set方法變成給屬性賦值,這么做完后,我們調(diào)用起來既可控又方便
>>> s = Student() >>> s.score = 60 # OK,實際轉(zhuǎn)化為s.set_score(60) >>> s.score # OK,實際轉(zhuǎn)化為s.get_score() 60 >>> s.score = 9999 Traceback (most recent call last): ... ValueError: score must between 0 ~ 100!
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
解決Opencv+Python cv2.imshow閃退問題
這篇文章主要介紹了解決Opencv+Python cv2.imshow閃退問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04
JAVA及PYTHON質(zhì)數(shù)計算代碼對比解析
這篇文章主要介紹了JAVA及PYTHON質(zhì)數(shù)計算代碼對比,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-06-06
Python實戰(zhàn)之利用Geopandas算出每個省面積
GeoPandas是一個基于pandas,針對地理數(shù)據(jù)做了特別支持的第三方模塊。本文將利用GeoPandas計算出每個省的面積,感興趣的小伙伴快跟隨小編一起學習一下吧2021-12-12

