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和php通信乱码问题解决方法
Apr 15 Python
python利用urllib实现爬取京东网站商品图片的爬虫实例
Aug 24 Python
Python数据可视化库seaborn的使用总结
Jan 15 Python
基于python实现自动化办公学习笔记(CSV、word、Excel、PPT)
Aug 06 Python
Python3使用PySynth制作音乐的方法
Sep 09 Python
Linux下升级安装python3.8并配置pip及yum的教程
Jan 02 Python
python七种方法判断字符串是否包含子串
Aug 18 Python
python如何随机生成高强度密码
Aug 19 Python
python爬虫搭配起Bilibili唧唧的流程分析
Dec 01 Python
一个非常简单好用的Python图形界面库(PysimpleGUI)
Dec 28 Python
Python运算符+与+=的方法实例
Feb 18 Python
python Autopep8实现按PEP8风格自动排版Python代码
Mar 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
FCKeditor的安装(PHP)
2007/01/13 PHP
NOD32 v2.70.32 简体中文封装版 提供下载了
2007/02/27 PHP
php 应用程序安全防范技术研究
2009/09/25 PHP
Laravel 5框架学习之向视图传送数据(进阶篇)
2015/04/08 PHP
PHP打印输出函数汇总
2016/08/28 PHP
PHP图片裁剪与缩放示例(无损裁剪图片)
2017/02/08 PHP
php并发加锁问题分析与设计代码实例讲解
2021/02/26 PHP
Pro JavaScript Techniques学习笔记
2010/12/28 Javascript
基于javascript实现随机颜色变化效果
2016/01/14 Javascript
让编辑器支持word复制黏贴、截屏的js代码
2016/10/17 Javascript
浅谈Angularjs link和compile的使用区别
2016/10/21 Javascript
JavaScript实现时钟滴答声效果
2017/01/29 Javascript
JavaScript的六种继承方式(推荐)
2017/06/26 Javascript
jQuery制作全屏宽度固定高度轮播图(实例讲解)
2017/07/08 jQuery
微信小程序dom操作的替代思路实例分析
2018/12/06 Javascript
vue-cli3环境变量与分环境打包的方法示例
2019/02/18 Javascript
使用axios请求时,发送formData请求的示例
2019/10/29 Javascript
Vue2.4+新增属性.sync、$attrs、$listeners的具体使用
2020/03/08 Javascript
Python时间戳使用和相互转换详解
2017/12/11 Python
python 图像平移和旋转的实例
2019/01/10 Python
Python循环结构的应用场景详解
2019/07/11 Python
详解CSS3的perspective属性设置3D变换距离的方法
2016/05/23 HTML / CSS
使用phonegap创建联系人的实现方法
2017/03/30 HTML / CSS
详解移动端h5页面根据屏幕适配的四种方案
2020/04/15 HTML / CSS
蔻驰法国官网:COACH法国
2018/11/14 全球购物
舞蹈教育学专业推荐信
2013/11/27 职场文书
会计的岗位职责
2014/03/15 职场文书
党员创先争优公开承诺书
2014/03/28 职场文书
党员一帮一活动总结
2014/07/08 职场文书
平面设计师岗位职责
2014/09/18 职场文书
兼职安全员岗位职责
2015/02/15 职场文书
2015年收银工作总结范文
2015/04/01 职场文书
幼儿园庆元旦主持词
2015/07/06 职场文书
python用tkinter开发的扫雷游戏
2021/06/01 Python
Python OpenCV实现图形检测示例详解
2022/04/08 Python
MySQL普通表如何转换成分区表
2022/05/30 MySQL