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的装饰器模式与面向切面编程详解
Jun 21 Python
Flask框架的学习指南之用户登录管理
Nov 20 Python
python利用sklearn包编写决策树源代码
Dec 21 Python
Windows下Anaconda2安装NLTK教程
Sep 19 Python
对Python 获取类的成员变量及临时变量的方法详解
Jan 22 Python
Python + OpenCV 实现LBP特征提取的示例代码
Jul 11 Python
python3 pillow模块实现简单验证码
Oct 31 Python
宝塔面板成功部署Django项目流程(图文)
Jun 22 Python
如何卸载python插件
Jul 08 Python
Python进行统计建模
Aug 10 Python
一篇文章搞懂python的转义字符及用法
Sep 03 Python
Jupyter Notebook安装及使用方法解析
Nov 12 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对二维数组按指定键值key排序示例代码
2013/11/26 PHP
PHP实现清除wordpress里恶意代码
2015/10/21 PHP
laravel手动创建数组分页的实现代码
2018/06/07 PHP
javascript中自定义对象的属性方法分享
2013/07/12 Javascript
js调用iframe实现打印页面内容的方法
2014/03/04 Javascript
详解js跨域原理以及2种解决方案
2015/12/09 Javascript
再谈JavaScript异步编程
2016/01/27 Javascript
Bootstrap表单控件使用方法详解
2017/01/11 Javascript
jquery,js简单实现类似Angular.js双向绑定
2017/01/13 Javascript
ES6新特性之字符串的扩展实例分析
2017/04/01 Javascript
使用JavaScript实现链表的数据结构的代码
2017/08/02 Javascript
基于jstree使用AJAX请求获取数据形成树
2017/08/29 Javascript
VueQuillEditor富文本上传图片(非base64)
2020/06/03 Javascript
如何阻止移动端浏览器点击图片浏览
2020/08/29 Javascript
[02:23]1个至宝=115个英雄特效 最“绿”至宝拉比克“魔导师密钥”登场
2018/12/29 DOTA
在Python中操作列表之List.pop()方法的使用
2015/05/21 Python
Python实现配置文件备份的方法
2015/07/30 Python
Python元组操作实例分析【创建、赋值、更新、删除等】
2017/07/24 Python
Python数据结构与算法之链表定义与用法实例详解【单链表、循环链表】
2017/09/28 Python
Python使用matplotlib实现绘制自定义图形功能示例
2018/01/18 Python
python批量创建指定名称的文件夹
2019/03/21 Python
python中的print()输出
2019/04/12 Python
django的csrf实现过程详解
2019/07/26 Python
Python3常用内置方法代码实例
2019/11/18 Python
Python线程指南分享
2019/11/19 Python
python-web根据元素属性进行定位的方法
2019/12/13 Python
3分钟看懂Python后端必须知道的Django的信号机制
2020/07/26 Python
实例代码讲解Python 线程池
2020/08/24 Python
python unichr函数知识点总结
2020/12/16 Python
html5的canvas方法使用指南
2014/12/15 HTML / CSS
美国著名的团购网站:Woot
2016/08/02 全球购物
英国第一蛋白粉品牌:Myprotein
2016/09/14 全球购物
Rhone官方网站:男士运动服装、健身服装和高级运动服
2019/05/01 全球购物
卫生安全检查制度
2014/02/04 职场文书
高中毕业生登记表自我鉴定范文
2014/03/18 职场文书
党的群众路线查摆剖析材料
2014/10/10 职场文书