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算法学习之计数排序实例
Dec 18 Python
Python编程中的for循环语句学习教程
Oct 14 Python
Python3下错误AttributeError: ‘dict’ object has no attribute’iteritems‘的分析与解决
Jul 06 Python
启动Atom并运行python文件的步骤
Nov 09 Python
在Pycharm中设置默认自动换行的方法
Jan 16 Python
Python3利用print输出带颜色的彩色字体示例代码
Apr 08 Python
python join方法使用详解
Jul 30 Python
解决Django后台ManyToManyField显示成Object的问题
Aug 09 Python
python函数参数(必须参数、可变参数、关键字参数)
Aug 16 Python
Python任务自动化工具tox使用教程
Mar 17 Python
python退出循环的方法
Jun 18 Python
django 实现后台从富文本提取纯文本
Jul 02 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
我的论坛源代码(八)
2006/10/09 PHP
php实现mysql数据库备份类
2008/03/20 PHP
Can't create/write to file 'C:\WINDOWS\TEMP\...MYSQL报错解决方法
2011/06/30 PHP
详解new function(){}和function(){}() 区别分析
2008/03/22 Javascript
jQuery的实现原理的模拟代码 -2 数据部分
2010/08/01 Javascript
jQuery编写widget的一些技巧分享
2010/10/28 Javascript
JS实现图片预加载无需等待
2012/12/21 Javascript
javascript使用正则控制input输入框允许输入的值方法大全
2014/06/19 Javascript
jQuery height()、innerHeight()、outerHeight()函数的区别详解
2016/05/23 Javascript
js获取form表单所有数据的简单方法
2016/08/18 Javascript
jQuery组件easyui基本布局实现代码
2016/08/25 Javascript
AngularJs Modules详解及示例代码
2016/09/01 Javascript
基于bootstrap的文件上传控件bootstrap fileinput
2016/12/23 Javascript
详解用vue编写弹出框组件
2017/07/04 Javascript
彻底弄懂 JavaScript 执行机制
2018/10/23 Javascript
Python进阶之递归函数的用法及其示例
2018/01/31 Python
Python 3.7新功能之dataclass装饰器详解
2018/04/21 Python
Python3.6日志Logging模块简单用法示例
2018/06/14 Python
Python根据文件名批量转移图片的方法
2018/10/21 Python
对Python实现累加函数的方法详解
2019/01/23 Python
Python3 pip3 list 出现 DEPRECATION 警告的解决方法
2019/02/16 Python
Python中super函数用法实例分析
2019/03/18 Python
浅谈Python 敏感词过滤的实现
2019/08/15 Python
Python Pandas 转换unix时间戳方式
2019/12/07 Python
学习python需要有编程基础吗
2020/06/02 Python
纯CSS3实现运行时钟的示例代码
2021/01/25 HTML / CSS
使用HTML5 Canvas API中的clip()方法裁剪区域图像
2016/03/25 HTML / CSS
美国娱乐和流行文化商品店:FYE
2017/09/14 全球购物
美国打印机墨水和碳粉购物网站:QuikShip Toner
2018/08/29 全球购物
世界上最好的野生海鲜和有机食品:Vital Choice
2020/01/16 全球购物
质量工程师岗位职责
2013/11/16 职场文书
2014年帮扶工作总结
2014/11/26 职场文书
钱学森电影观后感
2015/06/04 职场文书
PhpSpreadsheet中文文档 | Spreadsheet操作教程实例
2021/04/01 PHP
关于html选择框创建占位符的问题
2021/06/09 HTML / CSS
如何基于python实现单目三维重建详解
2022/06/25 Python