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

    @propertydef password(self):raise AttributeError('password is not a readable attribute')@password.setterdef password(self, password):self.password_hash = generate_password_hash(password)

遂重温下这个property的使用

在我们定义数据库字段类的时候,往往需要对其中的类属性做一些限制,一般用get和set方法来写,那在python中,我们该怎么做能够少写代码,又能优雅的实现想要的限制,减少错误的发生呢,这时候就需要我们的@property闪亮登场啦,巴拉巴拉能量……..

用代码来举例子更容易理解,比如一个学生成绩表定义成这样

class Student(object):def get_score(self):return self._scoredef 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):@propertydef score(self):return self._score@score.setterdef 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中@property的理解和使用相关推荐

  1. python 中 property 属性的讲解及应用

    Python中property属性的功能是:property属性内部进行一系列的逻辑计算,最终将计算结果返回 property属性的有两种方式: 装饰器 即:在方法上应用装饰器 类属性 即:在类中定义 ...

  2. python中property方法有用_python中@property和property函数常见使用方法示例

    本文实例讲述了python中@property和property函数常见使用方法.分享给大家供大家参考,具体如下: 1.基本的@property使用,可以把函数当做属性用 class Person(o ...

  3. python的objectproperty,python中property(lambda self: object())简单解释,,最后4行lambda

    python中property(lambda self: object())简单解释,,最后4行lambda 最后4行lambda.问题是:如何运作?它们的含义和结果是什么?您能否以简单的方式显示该声 ...

  4. python的property用法_在python中property怎样使用-百度经验

    在python中property可以使类中的方法变为类中的属性一样来使用,使得类中的属性值不易暴露,更加安全,那么在python中property怎样使用呢?下面小编就带大家来看看详细的教程! 工具/ ...

  5. python中property函数_python 邮件表格Python中property函数用法实例分析

    本文实例讲述了Python中property函数用法.分享给大家供大家参考,具体如下: 通常我们在访问和赋值属性的时候,都是在直接和类(实例的)的__dict__打交道,或者跟数据描述符等在打交道.但 ...

  6. python中result的用法_关于Python中的列表理解及用法

    在Python中,列表理解通常用于编写单行语句,这些语句通过可迭代对象进行迭代以创建新的列表或字典.本文首先介绍for循环如何在Python中工作,然后解释如何在Python中使用列表理解. Pyth ...

  7. python中raw是什么意思_对于Python中RawString的理解

    对于Python中RawString的理解 发布于 2016-01-11 06:56:27 | 100 次阅读 | 评论: 0 | 来源: PHPERZ Python编程语言Python 是一种面向对 ...

  8. 对python中axis的理解

    对 p y t h o n 中 a x i s 的 理 解 对python中axis的理解 对python中axis的理解 axis的实际含义是根据axis指定的维度进行连接,如矩阵m1的维度为(2, ...

  9. python yield理解_对Python中Yield的理解

    看到下面这段程序的时候,有点不明白这个yield到底是个啥东西,看了网上很多的博客,大致理解了yield的含义,所以记录下来. 要说yield首先要说python中的生成器,那么什么是生成器? 假设有 ...

  10. python中元组_理解python中的元组

    理解 python 中的元组 引言 在 Python 中元组是这样的: 元组是是这样一种数据结构:不变的或者不可改变的(简单来说不能重新赋值) .元素的有序序列.因为元组是 不变的,所以他的数值是不能 ...

最新文章

  1. php mpdf html 转pdf,使用 MPDF 将HTML转为PDF,然后将该PDF转为PNG图片的时候,中文报错... ......
  2. java中synchronized修饰静态方法和非静态方法有什么区别?
  3. centos redhat 6+ openldap 初级介绍
  4. 夏普电视android4.4.2,夏普电视怎么投屏 夏普电视投屏设置方法【详解】
  5. php随机获取一行文本,一行PHP随机字符串生成器?
  6. 文件已经上传到服务器翻译,服务器接受上传的优化 翻译+源码分析
  7. mysql 哈希缓存_MySQL数据库性能优化思路总结
  8. 容器编排技术 -- Kubernetes kubectl patch 命令详解
  9. 【转载】网站从百度云转入阿里云服务器
  10. 基于python的分类模型_python SVM 线性分类模型的实现
  11. LeetCode:Longest Substring Without Repeating Characters(最长不重复子串)
  12. pytorch 入门学习 MSE
  13. SQLServer2008R2精简版使用
  14. python电影推荐系统_电影推荐系统---协同过滤算法(SVD,NMF)
  15. 计算机是人类的好伴侣 作文,电脑真好作文
  16. 编程之美1:那些关于1的个数的经典面试题
  17. hexo页脚添加访客人数和总访问量
  18. 怎样才能胜任技术总监
  19. linux禅道怎么改公司名字,在linux系统下一键部署禅道环境
  20. 黄淮学院计算机类专业属于几本,黄淮学院是几本院校

热门文章

  1. entrez检索系统要服务器吗,Entrez 系统
  2. WiFi能连上但是上不了网怎么办?
  3. Java Web-----轮播图的实现
  4. Unity 文字转语音
  5. 周志华揭开机器学习本质的57张PPT
  6. 欢迎进入徐松亮博客一站式导航搜索(随时更新)
  7. Windows10 2004无线网卡电源管理消失 电源计划只有平衡
  8. Xcode13运行iPhone14模拟器暨低版本Xcode运行高版本模拟器
  9. Android逆向第二天
  10. hibernate继承(转)