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中使用Flask、MongoDB搭建简易图片服务器
Feb 04 Python
简单的编程0基础下Python入门指引
Apr 01 Python
举例讲解Python中的Null模式与桥接模式编程
Feb 02 Python
Python DataFrame 设置输出不显示index(索引)值的方法
Jun 07 Python
python安装pywin32clipboard的操作方法
Jan 24 Python
PyCharm安装Markdown插件的两种方法
Jun 24 Python
Python简易版停车管理系统
Aug 12 Python
python 实现在shell窗口中编写print不向屏幕输出
Feb 19 Python
matlab中imadjust函数的作用及应用举例
Feb 27 Python
解决pyqt5异常退出无提示信息的问题
Apr 08 Python
Jupyter notebook设置背景主题,字体大小及自动补全代码的操作
Apr 13 Python
解决import tensorflow as tf 出错的原因
Apr 16 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+DBM的同学录程序(5)
2006/10/09 PHP
PHP文件打开、关闭、写入的判断与执行代码
2011/05/24 PHP
用php实现百度网盘图片直链的代码分享
2012/11/01 PHP
深入php define()函数以及defined()函数的用法详解
2013/06/05 PHP
phpmailer在服务器上不能正常发送邮件的解决办法
2014/07/08 PHP
PHP 5.3和PHP 5.4出现FastCGI Error解决方法
2015/02/12 PHP
Json_decode 解析json字符串为NULL的解决方法(必看)
2017/02/17 PHP
PHP实现APP微信支付的实例讲解
2018/02/10 PHP
PHP压缩图片功能的介绍
2019/03/21 PHP
JavaScript 学习小结(适合新手参考)
2009/07/30 Javascript
jQuery删除节点的三个方法即remove()detach()和empty()
2013/12/27 Javascript
JavaScript组合拼接字符串的效率对比测试
2014/11/06 Javascript
Node.js 数据加密传输浅析
2016/11/16 Javascript
Extjs gridpanel 中的checkbox(复选框)根据某行的条件不能选中的解决方法
2017/02/17 Javascript
JS跳转手机站url的若干注意事项
2017/10/18 Javascript
利用百度地图API获取当前位置信息的实例
2017/11/06 Javascript
解决JSON.stringify()自动将中文转译成unicode的问题
2018/01/05 Javascript
关于js对textarea换行符的处理方法浅析
2018/08/03 Javascript
Vue+element-ui 实现表格的分页功能示例
2018/08/18 Javascript
vue-cli构建vue项目的步骤详解
2019/01/27 Javascript
maptalks+three.js+vue webpack实现二维地图上贴三维模型操作
2020/08/10 Javascript
用Python编写一个每天都在系统下新建一个文件夹的脚本
2015/05/04 Python
python类中super()和__init__()的区别
2016/10/18 Python
浅谈利用numpy对矩阵进行归一化处理的方法
2018/07/11 Python
python将一组数分成每3个一组的实例
2018/11/14 Python
python 创建一维的0向量实例
2019/12/02 Python
python如何获取apk的packagename和activity
2020/01/10 Python
Python爬虫之Selenium实现关闭浏览器
2020/12/04 Python
纯CSS3实现鼠标滑过按钮动画第二节
2020/07/16 HTML / CSS
日本最大的旅游网站:Rakuten Travel(乐天旅游)
2018/08/02 全球购物
意大利自行车商店:Cingolani Bike Shop
2019/09/03 全球购物
安全生产检讨书
2014/01/21 职场文书
汉语专业毕业生自荐信
2014/07/06 职场文书
幼儿园重阳节活动总结
2015/05/05 职场文书
python中subplot大小的设置步骤
2021/06/28 Python
Nginx如何限制IP访问只允许特定域名访问
2022/07/23 Servers