国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python @property原理解析和用法實例

2020-02-15 21:16:59
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了Python @property原理解析和用法實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

在我們定義數據庫字段類的時候,往往需要對其中的類屬性做一些限制,一般用get和set方法來寫,那在python中,我們該怎么做能夠少寫代碼,又能優雅的實現想要的限制,減少錯誤的發生呢,這時候就需要我們的@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

我們調用的時候需要這么調用:

>>> 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  def score(self):    return self._score  @score.setter #@score.setter是前一個@property裝飾后的副產品。  def score(self,value):    if not isinstance(value, int):      raise ValueError('分數必須是整數才行吶')    if value < 0 or 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 = 9999Traceback (most recent call last): ...ValueError: score must between 0 ~ 100!

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林站長站。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 邵阳县| 绥化市| 杭州市| 东乌珠穆沁旗| 台前县| 郧西县| 社旗县| 陇川县| 霍山县| 黑水县| 东港市| 宁都县| 修武县| 玉环县| 凌源市| 介休市| 乌鲁木齐市| 延津县| 增城市| 耒阳市| 枣强县| 衡水市| 绥芬河市| 保定市| 浦县| 瓮安县| 开化县| 莱州市| 镇巴县| 朔州市| 潜江市| 彩票| 东兴市| 海伦市| 滦平县| 兰州市| 明水县| 宜章县| 台安县| 乌拉特中旗| 株洲市|