python中@property的作用和getter setter的解释


Posted in Python onDecember 22, 2020

@property作用:

python的@property是python的一种装饰器,是用来修饰方法的。

我们可以使用@property装饰器来创建只读属性,@property装饰器会将方法转换为相同名称的只读属性,可以与所定义的属性配合使用,这样可以防止属性被修改。

1.修饰方法,让方法可以像属性一样访问。

class DataSet(object):
 @property
 def method_with_property(self): ##含有@property
   return 15
 def method_without_property(self): ##不含@property
   return 15

l = DataSet()
print(l.method_with_property) # 加了@property后,可以用调用属性的形式来调用方法,后面不需要加()。
print(l.method_without_property()) #没有加@property , 必须使用正常的调用方法的形式,即在后面加()#两个都输出为15。

如果使用property进行修饰后,又在调用的时候,方法后面添加了(), 那么就会显示错误信息:TypeError: 'int' object is not callable,也就是说添加@property 后,这个方法就变成了一个属性,如果后面加入了

(),那么就是当作函数来调用,而它却不是callable(可调用)的。

2.与所定义的属性配合使用,这样可以防止属性被修改。

由于python进行属性的定义时,没办法设置私有属性,因此要通过@property的方法来进行设置。这样可以隐藏属性名,让用户进行使用的时候无法随意修改。

class DataSet(object):
  def __init__(self):
    self._images = 1
    self._labels = 2 #定义属性的名称
  @property
  def images(self): #方法加入@property后,这个方法相当于一个属性,这个属性可以让用户进行使用,而且用户有没办法随意修改。
    return self._images 
  @property
  def labels(self):
    return self._labels
l = DataSet()
#用户进行属性调用的时候,直接调用images即可,而不用知道属性名_images,因此用户无法更改属性,从而保护了类的属性。
print(l.images) # 加了@property后,可以用调用属性的形式来调用方法,后面不需要加()。

getter和setter方法:

把一个getter方法变成属性,只需要加上@property就可以了,此时,@property本身又创建了另一个装饰器@score.setter,负责把一个setter方法变成属性赋值,于是,我们就拥有一个可控的属性操作:

class Student(object):

  @property
  def score(self):
    return self._score

  @score.setter
  def 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

我们在对实例属性操作的时候,就知道该属性很可能不是直接暴露的,而是通过getter和setter方法来实现的。

还可以定义只读属性,只定义getter方法,不定义setter方法就是一个只读属性:

class Student(object):

  @property
  def birth(self):
    return self._birth

  @birth.setter #设置属性
  def birth(self, value):
    self._birth = value

  @property
  def age(self):
    return 2015 - self._birth

上面的birth是可读写属性,而age就是一个只读属性,因为age可以根据birth和当前时间计算出来。

小结

@property广泛应用在类的定义中,可以让调用者写出简短的代码,同时保证对参数进行必要的检查,这样,程序运行时就减少了出错的可能性。

到此这篇关于python中@property的作用和getter setter的解释的文章就介绍到这了,更多相关python中@property的作用和getter setter内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python常用内置函数总结
Feb 08 Python
十分钟利用Python制作属于你自己的个性logo
May 07 Python
python查找重复图片并删除(图片去重)
Jul 16 Python
Django实现跨域的2种方法
Jul 31 Python
Python3简单爬虫抓取网页图片代码实例
Aug 26 Python
pytorch模型预测结果与ndarray互转方式
Jan 15 Python
如何在Django中使用聚合的实现示例
Mar 23 Python
tensorflow图像裁剪进行数据增强操作
Jun 30 Python
python如何提升爬虫效率
Sep 27 Python
Ubuntu20下的Django安装的方法步骤
Jan 24 Python
Python3中对json格式数据的分析处理
Jan 28 Python
python利用opencv实现颜色检测
Feb 23 Python
地图可视化神器kepler.gl python接口的使用方法
Dec 22 #Python
Python实现Word文档转换Markdown的示例
Dec 22 #Python
python爬虫利用selenium实现自动翻页爬取某鱼数据的思路详解
Dec 22 #Python
Django中ORM的基本使用教程
Dec 22 #Python
python通用数据库操作工具 pydbclib的使用简介
Dec 21 #Python
Python 多进程原理及实现
Dec 21 #Python
python-图片流传输的思路及示例(url转换二维码)
Dec 21 #Python
You might like
浅析PHP绘图技术
2013/07/03 PHP
Drupal7中常用的数据库操作实例
2014/03/02 PHP
PHP远程采集图片详细教程
2014/07/01 PHP
PHP GD库生成图像的几个函数总结
2014/11/19 PHP
js 文件引入实现代码
2010/04/23 Javascript
JavaScript函数详解
2014/11/17 Javascript
JS实现在页面随时自定义背景颜色的方法
2015/02/27 Javascript
jQuery解决$符号命名冲突
2016/06/18 Javascript
全面了解JavaScript的数据类型转换
2016/07/01 Javascript
JQuery对ASP.NET MVC数据进行更新删除
2016/07/13 Javascript
JavaScript简单获取系统当前时间完整示例
2016/08/02 Javascript
详解Javascript ES6中的箭头函数(Arrow Functions)
2016/08/24 Javascript
KVM虚拟化技术之使用Qemu-kvm创建和管理虚拟机的方法
2016/10/05 Javascript
详解Angular2 之 结构型指令
2017/06/21 Javascript
Angular2环境搭建具体操作步骤(推荐)
2017/08/04 Javascript
vue2.0在table中实现全选和反选的示例代码
2017/11/04 Javascript
微信小程序checkbox组件使用详解
2018/01/31 Javascript
ng-alain表单使用方式详解
2018/07/10 Javascript
vue input实现点击按钮文字增删功能示例
2019/01/29 Javascript
微信小程序(订阅消息)功能
2019/10/25 Javascript
vue界面发送表情的实现代码
2020/09/11 Javascript
[02:02]特效爆炸!DOTA2珍宝之瓶待你开启
2018/08/21 DOTA
python 设置文件编码格式的实现方法
2017/12/21 Python
mac系统安装Python3初体验
2018/01/02 Python
python多线程高级锁condition简单用法示例
2019/11/07 Python
Smashbox官网:美国知名彩妆品牌
2017/01/05 全球购物
某个公司的Java笔面试题
2016/03/11 面试题
星空联盟C# .net笔试题
2014/12/05 面试题
环境工程大学生个人的自我评价
2013/10/08 职场文书
学生个人自我鉴定范文
2014/03/28 职场文书
医疗纠纷协议书
2014/04/16 职场文书
人事行政经理岗位职责
2014/06/18 职场文书
群众路线教育实践活动民主生活会个人检查对照思想汇报
2014/10/04 职场文书
初中生散播谣言检讨书
2014/11/17 职场文书
2015年社区关工委工作总结
2015/04/03 职场文书
《烈火英雄》观后感:致敬和平时代的英雄
2019/11/11 职场文书