Python中@property的理解和使用示例


Posted in Python onJune 11, 2019

本文实例讲述了Python中@property的理解和使用。分享给大家供大家参考,具体如下:

重看狗书,看到对User表定义的时候有下面两行

@property
  def password(self):
    raise AttributeError('password is not a readable attribute')
  @password.setter
  def password(self, password):
    self.password_hash = generate_password_hash(password)

遂重温下这个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
  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数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
分析在Python中何种情况下需要使用断言
Apr 01 Python
用matplotlib画等高线图详解
Dec 14 Python
python中计算一个列表中连续相同的元素个数方法
Jun 29 Python
python简单验证码识别的实现方法
May 10 Python
解决python明明pip安装成功却找不到包的问题
Aug 28 Python
NumPy排序的实现
Jan 21 Python
python GUI库图形界面开发之PyQt5美化窗体与控件(异形窗体)实例
Feb 25 Python
基于python连接oracle导并出数据文件
Apr 28 Python
Python2手动安装更新pip过程实例解析
Jul 16 Python
python实现数据结构中双向循环链表操作的示例
Oct 09 Python
Python 转移文件至云对象存储的方法
Feb 07 Python
在Pycharm中安装Pandas库方法(简单易懂)
Feb 20 Python
Python实现将字符串的首字母变为大写,其余都变为小写的方法
Jun 11 #Python
详解Python3之数据指纹MD5校验与对比
Jun 11 #Python
Python自动抢红包教程详解
Jun 11 #Python
python解压TAR文件至指定文件夹的实例
Jun 10 #Python
python pyinstaller 加载ui路径方法
Jun 10 #Python
python 实现将文件或文件夹用相对路径打包为 tar.gz 文件的方法
Jun 10 #Python
python处理“
Jun 10 #Python
You might like
php简单实现查询数据库返回json数据
2015/04/16 PHP
php实现分页显示
2015/11/03 PHP
php读取torrent种子文件内容的方法(测试可用)
2016/05/03 PHP
PHP抓取远程图片(含不带后缀的)教程详解
2016/10/21 PHP
PHP数据库编程之MySQL优化策略概述
2017/08/16 PHP
thinkPHP框架中执行原生SQL语句的方法
2017/10/25 PHP
JavaScript面向对象之Prototypes和继承
2012/07/12 Javascript
jQuery新的事件绑定机制on()示例应用
2014/07/18 Javascript
每天一篇javascript学习小结(Function对象)
2015/11/16 Javascript
微信小程序 仿美团分类菜单 swiper分类菜单
2017/04/12 Javascript
jQuery插件FusionCharts绘制的2D双柱状图效果示例【附demo源码】
2017/05/13 jQuery
AngularJS路由Ui-router模块用法示例
2017/05/29 Javascript
BootStrap Table前台和后台分页对JSON格式的要求
2017/06/28 Javascript
基于jquery实现五星好评
2017/11/18 jQuery
将Sublime Text 3 添加到右键中的简单方法
2017/12/12 Javascript
Angular 4.x+Ionic3踩坑之Ionic 3.x界面传值详解
2018/03/13 Javascript
jQuery实现的滑块滑动导航效果示例
2018/06/04 jQuery
CKeditor4 字体颜色功能配置方法教程
2019/06/26 Javascript
vue vantUI实现文件(图片、文档、视频、音频)上传(多文件)
2019/10/15 Javascript
在 Django/Flask 开发服务器上使用 HTTPS
2014/07/03 Python
pip安装Python库时遇到的问题及解决方法
2017/11/23 Python
tensorflow saver 保存和恢复指定 tensor的实例讲解
2018/07/26 Python
Python实现多级目录压缩与解压文件的方法
2018/09/01 Python
python对列进行平移变换的方法(shift)
2019/01/10 Python
Python XlsxWriter模块Chart类用法实例分析
2019/03/11 Python
python循环定时中断执行某一段程序的实例
2019/06/29 Python
python 自动轨迹绘制的实例代码
2019/07/05 Python
关于pymysql模块的使用以及代码详解
2019/09/01 Python
Django实现whoosh搜索引擎使用jieba分词
2020/04/08 Python
Python Request类源码实现方法及原理解析
2020/08/17 Python
python 如何读、写、解析CSV文件
2021/03/03 Python
什么是"引用"?申明和使用"引用"要注意哪些问题?
2016/03/03 面试题
王老吉广告词
2014/03/20 职场文书
《路旁的橡树》教学反思
2014/04/07 职场文书
乡镇一岗双责责任书
2015/01/29 职场文书
2016入党积极分子考察评语
2015/12/01 职场文书