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 序列化 pickle/cPickle模块使用介绍
Nov 30 Python
python判断图片宽度和高度后删除图片的方法
May 22 Python
Python正则获取、过滤或者替换HTML标签的方法
Jan 28 Python
Python实现爬取需要登录的网站完整示例
Aug 19 Python
python2.7和NLTK安装详细教程
Sep 19 Python
Pycharm 实现下一个文件引用另外一个文件的方法
Jan 17 Python
Python切片操作去除字符串首尾的空格
Apr 22 Python
python实现微信防撤回神器
Apr 29 Python
Django中密码的加密、验密、解密操作
Dec 19 Python
python列表删除和多重循环退出原理详解
Mar 26 Python
pandas DataFrame 数据选取,修改,切片的实现
Apr 24 Python
Python3自带工具2to3.py 转换 Python2.x 代码到Python3的操作
Mar 03 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
Re:从零开始的异世界生活 第2季 开播啦
2020/07/24 日漫
ThinkPHP中I(),U(),$this-&gt;post()等函数用法
2014/11/22 PHP
php中最简单的字符串匹配算法
2014/12/16 PHP
PHP中使用xmlreader读取xml数据示例
2014/12/29 PHP
fsockopen pfsockopen函数被禁用,SMTP发送邮件不正常的解决方法
2015/09/20 PHP
php实现的错误处理封装类实例
2017/06/20 PHP
原生php实现excel文件读写的方法分析
2018/04/25 PHP
JQuery的一些小应用收集
2010/03/27 Javascript
JAVASCRIPT实现的WEB页面跳转以及页面间传值方法
2010/05/13 Javascript
JQuery获取表格数据示例代码
2014/05/26 Javascript
innerHTML中标签可以换行的方法汇总
2015/08/14 Javascript
基于jQuery实现仿百度首页换肤背景图片切换代码
2015/08/25 Javascript
jQuery实现查找最近父节点的方法
2016/06/23 Javascript
js实现无缝滚动图(可控制当前滚动的方向)
2017/02/22 Javascript
jquery实现图片放大点击切换
2017/06/06 jQuery
vue如何判断dom的class
2018/04/26 Javascript
JavaScript门道之标准库
2018/05/26 Javascript
利用angular自动编译andriod APK的绕坑经历分享
2019/03/08 Javascript
layui+SSM的数据表的增删改实例(利用弹框添加、修改)
2019/09/27 Javascript
Python六大开源框架对比
2015/10/19 Python
教你使用python实现微信每天给女朋友说晚安
2018/03/23 Python
Python通过调用mysql存储过程实现更新数据功能示例
2018/04/03 Python
基于Python开发chrome插件的方法分析
2018/07/07 Python
python实现鸢尾花三种聚类算法(K-means,AGNES,DBScan)
2019/06/27 Python
tensorflow模型转ncnn的操作方式
2020/05/25 Python
Python虚拟环境的创建和包下载过程分析
2020/06/19 Python
Python实现上下文管理器的方法
2020/08/07 Python
python如何写个俄罗斯方块
2020/11/06 Python
移动端Html5中百度地图的点击事件
2019/01/31 HTML / CSS
Omio美国:全欧洲低价大巴、火车和航班搜索和比价
2017/11/08 全球购物
Myprotein芬兰官网:欧洲第一运动营养品牌
2019/05/05 全球购物
Maxpeedingrods美国:高性能汽车零件
2020/02/14 全球购物
优秀员工表扬信
2014/01/17 职场文书
机关办公室岗位职责
2014/04/16 职场文书
师范毕业生求职信
2014/07/11 职场文书
经典演讲稿开场白
2014/08/25 职场文书