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编写一个国际象棋AI程序
Nov 28 Python
python类的方法属性与方法属性的动态绑定代码详解
Dec 27 Python
Python使用pickle模块实现序列化功能示例
Jul 13 Python
python组合无重复三位数的实例
Nov 13 Python
python3使用GUI统计代码量
Sep 18 Python
基于pytorch 预训练的词向量用法详解
Jan 06 Python
tensorflow的ckpt及pb模型持久化方式及转化详解
Feb 12 Python
Pycharm中import torch报错的快速解决方法
Mar 05 Python
浅析Python __name__ 是什么
Jul 07 Python
python 实现音频叠加的示例
Oct 29 Python
python 利用百度API识别图片文字(多线程版)
Dec 14 Python
python实现股票历史数据可视化分析案例
Jun 10 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
phpmyadmin 常用选项设置详解版
2010/03/07 PHP
使用session判断用户登录用户权限(超简单)
2013/06/08 PHP
php格式化日期和时间格式化示例分享
2014/02/24 PHP
php给图片加文字水印
2015/07/31 PHP
php 使用html5 XHR2实现上传文件与进度显示功能示例
2020/03/03 PHP
JavaScript 节点操作 以及DOMDocument属性和方法
2007/12/06 Javascript
Javascript !!的作用
2008/12/04 Javascript
Wordpress ThickBox 点击图片显示下一张图的修改方法
2010/12/11 Javascript
浅析node.js中close事件
2014/11/26 Javascript
javascript中函数作为参数调用的方法
2015/02/09 Javascript
原生JS实现平滑回到顶部组件
2016/03/16 Javascript
基于Bootstrap实现Material Design风格表单插件 附源码下载
2016/04/18 Javascript
关于javascript原型的修改与重写(覆盖)差别详解
2016/08/31 Javascript
纯原生js实现table表格的增删
2017/01/05 Javascript
JavaScript高级函数应用之分时函数实例分析
2018/08/03 Javascript
Angular ui-roter 和AngularJS 通过 ocLazyLoad 实现动态(懒)加载模块和依赖
2018/11/25 Javascript
js实现网页同时进行多个倒计时功能
2019/02/25 Javascript
一篇文章,教你学会Vue CLI 插件开发
2019/04/17 Javascript
JavaScript数组常用的增删改查与其他属性详解
2020/10/13 Javascript
three.js 实现露珠滴落动画效果的示例代码
2021/03/01 Javascript
用python实现的去除win下文本文件头部BOM的代码
2013/02/10 Python
Python跳出循环语句continue与break的区别
2014/08/25 Python
Python实现的FTP通信客户端与服务器端功能示例
2018/03/28 Python
django rest framework 数据的查找、过滤、排序的示例
2018/06/25 Python
用python打印1~20的整数实例讲解
2019/07/01 Python
python函数的万能参数传参详解
2019/07/26 Python
flask 使用 flask_apscheduler 做定时循环任务的实现
2019/12/10 Python
ansible-playbook实现自动部署KVM及安装python3的详细教程
2020/05/11 Python
PyCharm vs VSCode,作为python开发者,你更倾向哪种IDE呢?
2020/08/17 Python
Python自动化测试中yaml文件读取操作
2020/08/20 Python
医院护士专业个人的求职信
2013/12/09 职场文书
电子商务个人自荐信
2013/12/12 职场文书
银行贷款委托书范本
2014/10/11 职场文书
2015年外贸业务员工作总结范文
2015/05/23 职场文书
开学季:喜迎新生,迎新标语少不了
2019/11/07 职场文书
CSS3 制作的图片滚动效果
2021/04/14 HTML / CSS