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实现在无须过多援引的情况下创建字典的方法
Sep 25 Python
python计算对角线有理函数插值的方法
May 07 Python
Linux RedHat下安装Python2.7开发环境
May 20 Python
Python 结巴分词实现关键词抽取分析
Oct 21 Python
python实现二叉查找树实例代码
Feb 08 Python
django框架面向对象ORM模型继承用法实例分析
Jul 29 Python
Python re 模块findall() 函数返回值展现方式解析
Aug 09 Python
python 求定积分和不定积分示例
Nov 20 Python
用python拟合等角螺线的实现示例
Dec 27 Python
pygame实现飞机大战
Mar 11 Python
opencv中图像叠加/图像融合/按位操作的实现
Apr 01 Python
安装pytorch时报sslerror错误的解决方案
May 17 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
Home Coffee Roasting
2021/03/03 咖啡文化
本地机apache配置基于域名的虚拟主机详解
2013/08/10 PHP
PHP实现抓取Google IP并自动修改hosts文件
2015/02/12 PHP
Laravel 5框架学习之模型、控制器、视图基础流程
2015/04/08 PHP
PHP+jQuery+Ajax实现用户登录与退出
2015/04/27 PHP
php实现的mongodb操作类
2015/05/28 PHP
php中的常用魔术方法汇总
2016/02/14 PHP
PHP邮件群发机实现代码
2016/02/16 PHP
Yii 2.0自带的验证码使用经验分享
2017/06/19 PHP
PHP基于回溯算法解决n皇后问题的方法示例
2017/11/07 PHP
jQuery获得IE版本不准确webbrowser的解决方法
2014/02/23 Javascript
JS实现判断碰撞的方法
2015/02/11 Javascript
javascript背景时钟实现方法
2015/06/18 Javascript
js与jquery分别实现tab标签页功能的方法
2016/11/18 Javascript
javascript实现文字无缝滚动
2016/12/27 Javascript
jquery中绑定事件的异同
2017/02/28 Javascript
jQuery模拟爆炸倒计时功能实例代码
2017/08/21 jQuery
javascript算法之二叉搜索树的示例代码
2017/09/12 Javascript
从vue基础开始创建一个简单的增删改查的实例代码(推荐)
2018/02/11 Javascript
非常实用的jQuery代码段集锦【检测浏览器、滚动、复制、淡入淡出等】
2019/08/08 jQuery
node.js +mongdb实现登录功能
2020/06/18 Javascript
编写Python脚本批量下载DesktopNexus壁纸的教程
2015/05/06 Python
Python实现读取机器硬件信息的方法示例
2018/06/09 Python
python快速排序的实现及运行时间比较
2019/11/22 Python
Tensorflow的常用矩阵生成方式
2020/01/04 Python
python进度条显示-tqmd模块的实现示例
2020/08/23 Python
Python logging日志库空间不足问题解决
2020/09/14 Python
百日安全生产活动总结
2014/07/05 职场文书
免职证明样本
2014/10/23 职场文书
先进个人材料怎么写
2014/12/30 职场文书
导游词之珠海轮廓
2019/10/25 职场文书
Python爬虫爬取全球疫情数据并存储到mysql数据库的步骤
2021/03/29 Python
Python实现Telnet自动连接检测密码的示例
2021/04/16 Python
Vue-Element-Admin集成自己的接口实现登录跳转
2021/06/23 Vue.js
Python尝试实现蒙特卡罗模拟期权定价
2022/04/21 Python
SpringBoot全局异常处理方案分享
2022/05/25 Java/Android