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 zip文件 压缩
Dec 24 Python
python实现人人网登录示例分享
Jan 19 Python
Python解析命令行读取参数--argparse模块使用方法
Jan 23 Python
python基础教程项目三之万能的XML
Apr 02 Python
解决Tensorflow安装成功,但在导入时报错的问题
Jun 13 Python
基于PyQt4和PySide实现输入对话框效果
Feb 27 Python
Python数据类型之Number数字操作实例详解
May 08 Python
Django rest framework jwt的使用方法详解
Aug 08 Python
Python2和Python3中@abstractmethod使用方法
Feb 04 Python
python使用梯度下降和牛顿法寻找Rosenbrock函数最小值实例
Apr 02 Python
python 下载文件的几种方式分享
Apr 07 Python
Python基础之条件语句详解
Jun 16 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
二次元帅气男生排行榜,只想悄悄收藏系列
2020/03/04 日漫
关于php支持分块与断点续传文件下载功能代码
2014/05/09 PHP
PHP微框架Dispatch简介
2014/06/12 PHP
php中动态修改ini配置
2014/10/14 PHP
PHP冒泡算法详解(递归实现)
2014/11/10 PHP
跨浏览器PHP下载文件名中的中文乱码问题解决方法
2015/03/05 PHP
Extjs中常用表单介绍与应用
2010/06/07 Javascript
JQuery live函数
2010/12/24 Javascript
jquery中获取select选中值的代码
2011/06/27 Javascript
在js(jquery)中获得文本框焦点和失去焦点的方法
2012/12/04 Javascript
js获取location.href的参数实例代码
2013/08/02 Javascript
浅谈bootstrap源码分析之scrollspy(滚动侦听)
2016/06/06 Javascript
Node.js复制文件的方法示例
2016/12/29 Javascript
JS判断时间段的实现代码
2017/06/14 Javascript
浅谈vue项目优化之页面的按需加载(vue+webpack)
2017/12/11 Javascript
js使用ajax传值给后台,后台返回字符串处理方法
2018/08/08 Javascript
jQuery轮播图实例详解
2018/08/15 jQuery
Nodejs把接收图片base64格式保存为文件存储到服务器上
2018/09/26 NodeJs
vue使用video插件vue-video-player详解
2020/10/23 Javascript
原生js实现贪吃蛇游戏
2020/10/26 Javascript
微信小程序实现弹幕墙(祝福墙)
2020/11/18 Javascript
[42:32]DOTA2上海特级锦标赛B组资格赛#2 Fnatic VS Spirit第二局
2016/02/27 DOTA
python动态加载包的方法小结
2016/04/18 Python
Python求解任意闭区间的所有素数
2018/06/10 Python
Python字典对象实现原理详解
2019/07/01 Python
matplotlib实现显示伪彩色图像及色度条
2019/12/07 Python
如何在Python对Excel进行读取
2020/06/04 Python
Python如何telnet到网络设备
2021/02/18 Python
水产养殖学应届生求职信
2013/09/29 职场文书
应届大专毕业生自我鉴定
2014/04/08 职场文书
服装设计专业自荐信
2014/06/17 职场文书
《多彩的民间艺术》教学反思
2016/02/16 职场文书
2016年优秀共青团员事迹材料
2016/02/25 职场文书
python中__slots__节约内存的具体做法
2021/07/04 Python
python之json文件转xml文件案例讲解
2021/08/07 Python
Java线程的6种状态与生命周期
2022/05/11 Java/Android