Python中@property的理解和使用示例


Posted in Python onJune 11, 2019

本文实例讲述了Python中@property的理解和使用。分享给大家供大家参考,具体如下:

重看狗书,看到对User表定义的时候有下面两行

@property
  def password(self):
    raise AttributeError('password is not a readable attribute')
  @password.setter
  def password(self, password):
    self.password_hash = generate_password_hash(password)

遂重温下这个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
  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数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python基础教程之实现石头剪刀布游戏示例
Feb 11 Python
Flask入门教程实例:搭建一个静态博客
Mar 27 Python
python 远程统计文件代码分享
May 14 Python
Python中函数的参数定义和可变参数用法实例分析
Jun 04 Python
python 信息同时输出到控制台与文件的实例讲解
May 11 Python
pyqt5 comboBox获得下标、文本和事件选中函数的方法
Jun 14 Python
python检测服务器端口代码实例
Aug 31 Python
Python 文件操作之读取文件(read),文件指针与写入文件(write),文件打开方式示例
Sep 29 Python
python图形用户接口实例详解
Dec 16 Python
Python3+SQLAlchemy+Sqlite3实现ORM教程
Feb 16 Python
python爬取网页版QQ空间,生成各类图表
Jun 02 Python
解决IDEA翻译插件Translation报错更新TTK失败不能使用
Apr 24 Python
Python实现将字符串的首字母变为大写,其余都变为小写的方法
Jun 11 #Python
详解Python3之数据指纹MD5校验与对比
Jun 11 #Python
Python自动抢红包教程详解
Jun 11 #Python
python解压TAR文件至指定文件夹的实例
Jun 10 #Python
python pyinstaller 加载ui路径方法
Jun 10 #Python
python 实现将文件或文件夹用相对路径打包为 tar.gz 文件的方法
Jun 10 #Python
python处理“
Jun 10 #Python
You might like
比特率,大家看看这个就不用收音机音质去比MP3音质了
2021/03/01 无线电
抓取YAHOO股票报价的类
2009/05/15 PHP
php strnatcmp()函数的用法总结
2013/11/27 PHP
php metaphone()函数及php localeconv() 函数实例解析
2016/05/15 PHP
Thinkphp框架开发移动端接口(2)
2016/08/18 PHP
实例讲解JS中数组Array的操作方法
2014/05/09 Javascript
JS中处理时间之setUTCMinutes()方法的使用
2015/06/12 Javascript
JS组件系列之Bootstrap table表格组件神器【终结篇】
2016/05/10 Javascript
jQuery图片渐变特效的简单实现
2016/06/25 Javascript
浅谈Vue响应式(数组变异方法)
2018/05/07 Javascript
Node.js命令行/批处理中如何更改Linux用户密码浅析
2018/07/22 Javascript
layui中table表头样式修改方法
2018/08/15 Javascript
Node.js Windows Binary二进制文件安装方法
2019/05/16 Javascript
Layui 动态禁止select下拉的例子
2019/09/03 Javascript
JavaScript 如何计算文本的行数的实现
2020/09/14 Javascript
python类参数self使用示例
2014/02/17 Python
Python中的闭包实例详解
2014/08/29 Python
Django静态资源URL STATIC_ROOT的配置方法
2014/11/08 Python
一份python入门应该看的学习资料
2018/04/11 Python
python list元素为tuple时的排序方法
2018/04/18 Python
Python二叉树的镜像转换实现方法示例
2019/03/06 Python
Python批量修改图片分辨率的实例代码
2019/07/04 Python
python pickle存储、读取大数据量列表、字典数据的方法
2019/07/07 Python
Python BeautifulSoup [解决方法] TypeError: list indices must be integers or slices, not str
2019/08/07 Python
Python使用grequests(gevent+requests)并发发送请求过程解析
2019/09/25 Python
利用Python产生加密表和解密表的实现方法
2019/10/15 Python
详解python 降级到3.6终极解决方案
2020/02/06 Python
Python爬取新型冠状病毒“谣言”新闻进行数据分析
2020/02/16 Python
解决pyqt5异常退出无提示信息的问题
2020/04/08 Python
美国在线轮胎零售商:SimpleTire
2019/04/08 全球购物
毕业生就业推荐表自我鉴定
2014/03/20 职场文书
少儿节目主持串词
2014/04/02 职场文书
自我管理的活动方案
2014/08/25 职场文书
《童年的发现》教学反思
2016/02/18 职场文书
导游词之介休绵山
2019/12/31 职场文书
「魔法少女伊莉雅」美游粘土人开订
2022/03/21 日漫