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


Posted in Python onFebruary 11, 2020

这篇文章主要介绍了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 = 9999
Traceback (most recent call last):
 ...
ValueError: score must between 0 ~ 100!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现的异步代理爬虫及代理池
Mar 17 Python
Python中如何优雅的合并两个字典(dict)方法示例
Aug 09 Python
Django1.9 加载通过ImageField上传的图片方法
May 25 Python
解决Python安装后pip不能用的问题
Jun 12 Python
python实现排序算法解析
Sep 08 Python
Opencv+Python 色彩通道拆分及合并的示例
Dec 08 Python
对python实现模板生成脚本的方法详解
Jan 30 Python
Python中的random.uniform()函数教程与实例解析
Mar 02 Python
Python 使用PyQt5 完成选择文件或目录的对话框方法
Jun 27 Python
PyQt中使用QtSql连接MySql数据库的方法
Jul 28 Python
Numpy数组的广播机制的实现
Nov 03 Python
Python的logging模块基本用法
Dec 24 Python
如何使用Python发送HTML格式的邮件
Feb 11 #Python
python模式 工厂模式原理及实例详解
Feb 11 #Python
Python3搭建http服务器的实现代码
Feb 11 #Python
tensorflow实现二维平面模拟三维数据教程
Feb 11 #Python
python线程join方法原理解析
Feb 11 #Python
使用Python求解带约束的最优化问题详解
Feb 11 #Python
python 非线性规划方式(scipy.optimize.minimize)
Feb 11 #Python
You might like
php缩小png图片不损失透明色的解决方法
2013/12/25 PHP
jquery select选中的一个小问题
2009/10/11 Javascript
JQuery获取文本框中字符长度的代码
2011/09/29 Javascript
javascript不可用的问题探究
2013/10/01 Javascript
textarea 控制输入字符字节数(示例代码)
2013/12/27 Javascript
javascript间隔定时器(延时定时器)学习 间隔调用和延时调用
2014/01/13 Javascript
jQuery实现首页顶部可伸缩广告特效代码
2015/04/15 Javascript
JavaScript处理解析JSON数据过程详解
2015/09/11 Javascript
Bootstrap每天必学之表单
2015/11/23 Javascript
全面解析Bootstrap中transition、affix的使用方法
2016/05/30 Javascript
JS控制层作圆周运动的方法
2016/06/20 Javascript
原生JS实现的放大镜效果实例代码
2016/10/15 Javascript
js实现表格筛选功能
2017/01/18 Javascript
基于BootStrap的文本编辑器组件Summernote
2017/10/27 Javascript
nodejs检测因特网是否断开的解决方案
2019/04/17 NodeJs
javascript实现函数柯里化与反柯里化过程解析
2019/10/08 Javascript
vue+element UI实现树形表格
2020/12/29 Vue.js
用Python程序抓取网页的HTML信息的一个小实例
2015/05/02 Python
python实现上传下载文件功能
2020/11/19 Python
python实现图片处理和特征提取详解
2017/11/13 Python
python 制作自定义包并安装到系统目录的方法
2018/10/27 Python
在python中pandas的series合并方法
2018/11/12 Python
解决Python中list里的中文输出到html模板里的问题
2018/12/17 Python
对Python函数设计规范详解
2019/07/19 Python
Python Pillow.Image 图像保存和参数选择方式
2020/01/09 Python
python如何把字符串类型list转换成list
2020/02/18 Python
Python编写单元测试代码实例
2020/09/10 Python
python BeautifulSoup库的安装与使用
2020/12/17 Python
常用的HTML5列表标签
2017/06/20 HTML / CSS
屈臣氏泰国官网:Watsons TH
2021/02/23 全球购物
董事长职责范文
2013/11/08 职场文书
小学敬老月活动方案
2014/02/11 职场文书
新闻专业毕业生求职信
2014/08/08 职场文书
简爱电影观后感
2015/06/10 职场文书
签约仪式致辞
2015/07/30 职场文书
SpringBoot快速入门详解
2021/07/21 Java/Android