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程序设计入门(4)模块和包
Jun 16 Python
Python 模拟购物车的实例讲解
Sep 11 Python
Python机器学习之SVM支持向量机
Dec 27 Python
pytorch 把MNIST数据集转换成图片和txt的方法
May 20 Python
Django 多语言教程的实现(i18n)
Jul 07 Python
Python爬取个人微信朋友信息操作示例
Aug 03 Python
python代码编写计算器小程序
Mar 30 Python
使用Pandas将inf, nan转化成特定的值
Dec 19 Python
Python 内置函数globals()和locals()对比详解
Dec 23 Python
如何在mac版pycharm选择python版本
Jul 21 Python
重构Python代码的六个实例
Nov 25 Python
python百行代码实现汉服圈图片爬取
Nov 23 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 utf-8编码问题,utf8编码,数据库乱码,页面显示输出乱码
2013/04/08 PHP
Thinkphp多文件上传实现方法
2014/10/31 PHP
php简单分页类实现方法
2015/02/26 PHP
JMenuTab简单使用说明
2008/03/13 Javascript
js的表单操作 简单计算器
2011/12/29 Javascript
jQuery中filter()和find()的区别深入了解
2013/09/25 Javascript
jquery 扑捉回车键事件代码
2014/04/24 Javascript
JavaScript异步回调的Promise模式封装实例
2014/06/07 Javascript
js实现支持手机滑动切换的轮播图片效果实例
2015/04/29 Javascript
js实现简洁大方的二级下拉菜单效果代码
2015/09/01 Javascript
原生js编写autoComplete插件
2016/04/13 Javascript
原生js代码实现图片放大境效果
2016/10/30 Javascript
jQ处理xml文件和xml字符串的方法(详解)
2016/11/22 Javascript
详解js前端代码异常监控
2017/01/11 Javascript
ie下js不执行的几种可能
2017/02/28 Javascript
VueJs使用Amaze ui调整列表和内容页面
2017/11/30 Javascript
JavaScript中的回调函数实例讲解
2019/01/27 Javascript
Python multiprocessing.Manager介绍和实例(进程间共享数据)
2014/11/21 Python
在Python中定义和使用抽象类的方法
2016/06/30 Python
python如何获取服务器硬件信息
2017/05/11 Python
python实现最长公共子序列
2018/05/22 Python
Python DataFrame一列拆成多列以及一行拆成多行
2019/08/06 Python
Python Django 添加首页尾页上一页下一页代码实例
2019/08/21 Python
Python日期格式和字符串格式相互转换的方法
2020/02/18 Python
Python基础之列表常见操作经典实例详解
2020/02/26 Python
深深扎根运动世界的生活品牌:Tillys
2017/10/30 全球购物
维也纳通行证:Vienna PASS
2019/07/18 全球购物
加拿大的标志性百货公司:Hudson’s Bay(哈得逊湾)
2019/09/03 全球购物
定义一结构体数组表示分数,并求两个分数相加之和
2013/06/11 面试题
自我鉴定怎么写
2013/12/05 职场文书
工程总经理工作职责
2013/12/09 职场文书
毕业大学生自荐信
2014/06/17 职场文书
2014年群众路线教育实践活动整改措施
2014/09/24 职场文书
本科毕业论文致谢词
2015/05/14 职场文书
护理心得体会范文
2016/01/22 职场文书
《比的意义》教学反思
2016/02/18 职场文书