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中使用pyhook实现键盘监控的例子
Jul 18 Python
Linux下编译安装MySQL-Python教程
Feb 02 Python
Python MySQLdb Linux下安装笔记
May 09 Python
Python Socket传输文件示例
Jan 16 Python
python实现决策树C4.5算法详解(在ID3基础上改进)
May 31 Python
解决python matplotlib imshow无法显示的问题
May 24 Python
Python3实现的Mysql数据库操作封装类
Jun 06 Python
python 用for循环实现1~n求和的实例
Feb 01 Python
Python基础学习之函数方法实例详解
Jun 18 Python
python实现的读取网页并分词功能示例
Oct 29 Python
python装饰器原理与用法深入详解
Dec 19 Python
Django中从mysql数据库中获取数据传到echarts方式
Apr 07 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
Discuz Uchome ajaxpost小技巧
2011/01/04 PHP
一些PHP Coding Tips(php小技巧)[2011/04/02最后更新]
2011/05/02 PHP
PHP对象转换为数组函数(递归方法)
2012/02/04 PHP
PHP使用GIFEncoder类生成的GIF动态图片验证码
2014/07/01 PHP
PHP实现获取客户端IP并获取IP信息
2015/03/17 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
2017/08/29 PHP
PHP 文件写入和读取操作实例详解【必看篇】
2019/11/04 PHP
JavaScript页面刷新与弹出窗口问题的解决方法
2010/03/02 Javascript
EXTJS内使用ACTIVEX控件引起崩溃问题的解决方法
2010/03/31 Javascript
window.parent与window.openner区别介绍
2012/04/12 Javascript
js数组循环遍历数组内所有元素的方法
2014/01/18 Javascript
jquery如何判断表格同一列不同行input数据是否重复
2014/05/14 Javascript
JavaScript中伪协议 javascript:使用探讨
2014/07/18 Javascript
jquery单选框radio绑定click事件实现方法
2015/01/14 Javascript
javascript实现状态栏文字首尾相接循环滚动的方法
2015/07/22 Javascript
微信小程序实战之自定义toast(6)
2017/04/18 Javascript
2种简单的js倒计时方式
2017/10/20 Javascript
vue实现提示保存后退出的方法
2018/03/15 Javascript
解决vue请求接口第一次成功,第二次失败问题
2020/09/08 Javascript
JavaScript 异步时序问题
2020/11/20 Javascript
基于Python的身份证号码自动生成程序
2014/08/15 Python
Python中函数的参数定义和可变参数用法实例分析
2015/06/04 Python
Python实现的使用telnet登陆聊天室实例
2015/06/17 Python
Python爬虫辅助利器PyQuery模块的安装使用攻略
2016/04/24 Python
Python实现复杂对象转JSON的方法示例
2017/06/22 Python
Python干货:分享Python绘制六种可视化图表
2018/08/27 Python
Django如何使用第三方服务发送电子邮件
2019/08/14 Python
基于python监控程序是否关闭
2020/01/14 Python
波兰在线杂货店:Polski Koszyk
2019/11/02 全球购物
同学会邀请书大全
2014/01/12 职场文书
初一生物教学反思
2014/01/18 职场文书
铲车司机岗位职责
2014/03/15 职场文书
优秀食品类广告词
2014/03/19 职场文书
市场营销工作计划书
2014/09/15 职场文书
婚育证明格式
2015/06/17 职场文书
使用pandas模块实现数据的标准化操作
2021/05/14 Python