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新手在作用域方面经常容易碰到的问题
Apr 03 Python
Python代码调试的几种方法总结
Apr 15 Python
Python3爬虫学习之爬虫利器Beautiful Soup用法分析
Dec 12 Python
Python字符串的全排列算法实例详解
Jan 07 Python
对django中foreignkey的简单使用详解
Jul 28 Python
Python爬虫 scrapy框架爬取某招聘网存入mongodb解析
Jul 31 Python
python 使用while写猜年龄小游戏过程解析
Oct 07 Python
PYQT5开启多个线程和窗口,多线程与多窗口的交互实例
Dec 13 Python
pytorch 指定gpu训练与多gpu并行训练示例
Dec 31 Python
keras获得某一层或者某层权重的输出实例
Jan 24 Python
python可以用哪些数据库
Jun 22 Python
python如何编写类似nmap的扫描工具
Nov 06 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
PHP封装的XML简单操作类完整实例
2017/11/13 PHP
总结一些js自定义的函数
2006/08/05 Javascript
得到文本框选中的文字,动态插入文字的js代码
2007/03/07 Javascript
让innerText在firefox火狐和IE浏览器都能用的写法
2011/05/14 Javascript
JS实现日期加减的方法
2013/11/29 Javascript
js实现鼠标划过给div加透明度的方法
2015/05/25 Javascript
JavaScript数组各种常见用法实例分析
2015/08/04 Javascript
js倒计时小实例(多次定时)
2016/12/08 Javascript
js 动态生成html 触发事件传参字符转义的实例
2017/02/14 Javascript
微信小程序 空白页重定向解决办法
2017/06/27 Javascript
jQuery 中msgTips 顶部弹窗效果实现代码
2017/08/14 jQuery
详解nodejs中express搭建权限管理系统
2017/09/15 NodeJs
详解webpack + react + react-router 如何实现懒加载
2017/11/20 Javascript
详解vue指令与$nextTick 操作DOM的不同之处
2018/08/02 Javascript
如何用JavaScript实现功能齐全的单链表详解
2019/02/11 Javascript
微信小程序全局变量改变监听的实现方法
2019/07/15 Javascript
ant-design-vue 实现表格内部字段验证功能
2019/12/16 Javascript
详解JS预解析原理
2020/06/16 Javascript
原生JavaScript实现换肤
2021/02/19 Javascript
python使用电子邮件模块smtplib的方法
2016/08/28 Python
Django基于ORM操作数据库的方法详解
2018/03/27 Python
Python爬虫实现(伪)球迷速成
2018/06/10 Python
Python Websocket服务端通信的使用示例
2020/02/25 Python
Python实现我的世界小游戏源代码
2021/03/02 Python
CSS3教程(10):CSS3 HSL声明设置颜色
2009/04/02 HTML / CSS
W Concept美国:精选全球独立设计师
2017/02/22 全球购物
波兰汽车配件网上商店:iParts.pl
2020/09/08 全球购物
商务英语应届生自我鉴定
2013/12/08 职场文书
2014年母亲节演讲稿范文
2014/05/07 职场文书
工作证明英文模板
2014/10/21 职场文书
幼儿园开学通知
2015/04/24 职场文书
2015年统计员个人工作总结
2015/07/23 职场文书
公司晚宴祝酒词
2015/08/11 职场文书
解决MultipartFile.transferTo(dest) 报FileNotFoundExcep的问题
2021/07/01 Java/Android
人物搭配车车超萌联名预备中 【咒术迴战】 ⨯ 【天竺鼠车车】 展开合作
2022/04/11 日漫
netty 实现tomcat的示例代码
2022/06/05 Servers