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实现一个简单的项目监控
Mar 31 Python
研究Python的ORM框架中的SQLAlchemy库的映射关系
Apr 25 Python
python之yield和Generator深入解析
Sep 18 Python
wxPython实现列表增删改查功能
Nov 19 Python
详解python 中in 的 用法
Dec 12 Python
Pytest mark使用实例及原理解析
Feb 22 Python
如何真正的了解python装饰器
Aug 14 Python
Python列表推导式实现代码实例
Sep 09 Python
pandas处理csv文件的方法步骤
Oct 16 Python
python给list排序的简单方法
Dec 10 Python
利用python实时刷新基金估值(摸鱼小工具)
Sep 15 Python
python实现学员管理系统(面向对象版)
Jun 05 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 自定义错误处理函数trigger_error()
2013/03/26 PHP
php简单实现sql防注入的方法
2016/04/22 PHP
php封装的数据库函数与用法示例【参考thinkPHP】
2016/11/08 PHP
Yii框架弹出框功能示例
2017/01/07 PHP
PHP 使用二进制保存用户状态的实例
2018/01/29 PHP
发布一个基于javascript的动画类 Fx.js
2010/11/05 Javascript
JavaScript Array对象扩展indexOf()方法
2014/05/09 Javascript
JQuery使用$.ajax和checkbox实现下次不在通知功能
2015/04/16 Javascript
浅谈javascript的Touch事件
2015/09/27 Javascript
jQuery通过写入cookie实现更换网页背景的方法
2016/04/15 Javascript
json实现添加、遍历与删除属性的方法
2016/06/17 Javascript
JavaScript鼠标事件,点击鼠标右键,弹出div的简单实例
2016/08/03 Javascript
jQuery获取file控件中图片的宽高与大小
2016/08/04 Javascript
微信小程序左滑删除效果的实现代码
2017/02/20 Javascript
Angular使用 ng-img-max 调整浏览器中的图片的示例代码
2017/08/17 Javascript
nodejs实现爬取网站图片功能
2017/12/14 NodeJs
vue项目中添加单元测试的方法
2018/07/21 Javascript
Vue.set()动态的新增与修改数据,触发视图更新的方法
2018/09/15 Javascript
Vue中对拿到的数据进行A-Z排序的实例
2018/09/25 Javascript
大转盘抽奖小程序版 转盘抽奖网页版
2020/04/16 Javascript
详解用async/await来处理异步
2019/08/28 Javascript
对layui中的onevent 和event的使用详解
2019/09/06 Javascript
[01:05:00]2018国际邀请赛 表演赛 Pain vs OpenAI
2018/08/24 DOTA
Python输出汉字字库及将文字转换为图片的方法
2016/06/04 Python
Python实现通过继承覆盖方法示例
2018/07/02 Python
通过shell+python实现企业微信预警
2019/03/07 Python
Python3打包exe代码2种方法实例解析
2020/02/17 Python
使用OpenCV获取图像某点的颜色值,并设置某点的颜色
2020/06/02 Python
Keras SGD 随机梯度下降优化器参数设置方式
2020/06/19 Python
Python基于opencv的简单图像轮廓形状识别(全网最简单最少代码)
2021/01/28 Python
Html5 Canvas动画基础碰撞检测的实现
2018/12/06 HTML / CSS
英国领先品牌手动工具和电动工具供应商:Tooled Up
2018/11/24 全球购物
美国Jeep配件购物网站:Morris 4×4 Center
2019/05/01 全球购物
精选鞋类、服装和配饰的全球领先目的地:Bodega
2021/02/27 全球购物
劳动争议和解协议书范本
2014/11/20 职场文书
刚学完怎么用Python实现定时任务,转头就跑去撩妹!
2021/06/05 Python