@property作用:

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

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

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

classDataSet(object):

@propertydef method_with_property(self): ##含有@property

return 15

def method_without_property(self): ##不含@property

return 15l=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的方法来进行设置。这样可以隐藏属性名,让用户进行使用的时候无法随意修改。

classDataSet(object):def __init__(self):

self._images= 1self._labels= 2 #定义属性的名称

@propertydef images(self): #方法加入@property后,这个方法相当于一个属性,这个属性可以让用户进行使用,而且用户有没办法随意修改。

returnself._images

@propertydeflabels(self):returnself._labels

l=DataSet()#用户进行属性调用的时候,直接调用images即可,而不用知道属性名_images,因此用户无法更改属性,从而保护了类的属性。

print(l.images) #加了@property后,可以用调用属性的形式来调用方法,后面不需要加()。

getter和setter方法:

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

classStudent(object):

@propertydefscore(self):returnself._score

@score.setterdefscore(self, value):if notisinstance(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方法就是一个只读属性:

classStudent(object):

@propertydefbirth(self):returnself._birth

@birth.setter #设置属性defbirth(self, value):

self._birth=value

@propertydefage(self):return 2015 - self._birth

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

小结

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

python property作用_python中@property的作用和getter setter的解释相关推荐

  1. python wraps模块_python中 wraps 的作用

    这里使用两段代码比较加入wraps装饰器后,函数打印的结果对比: 新建文件名:Testword 代码1:不加wraps装饰器 # coding=utf-8 from functools import ...

  2. new to python什么意思_Python中__new__的作用

    __new__ 的作用 依照Python官方文档的说法,__new__方法主要是当你继承一些不可变的class时(比如int, str, tuple), 提供给你一个自定义这些类的实例化过程的途径.还 ...

  3. python的property用法_Python 中@property的用法

    class Person(object): def init(self, name, age): self.__name = name self.__age = age def get_age_fun ...

  4. python里dir是什么意思_python中dir什么作用

    python中dir的作用是:1.dir函数传入数据类型返回该数据类型的所有内置方法:2.dir函数传入模块名返回该模块的所有属性和方法. dir() 内置函数的作用 python 内置方法有很多,无 ...

  5. python中的pass语句_Python中pass的作用与使用代码示例

    本篇文章小编给大家分享一下Python中pass的作用与使用代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. Python中pass的作用 空语 ...

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

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

  7. super在python中是什么意思_python中super()的作用是什么

    python中super()的作用是什么 发布时间:2020-08-13 13:59:16 来源:亿速云 阅读:112 作者:小新 这篇文章主要介绍python中super()的作用是什么,文中介绍的 ...

  8. python中的pass是什么意思_Python中pass的作用与使用教程

    Python中pass的作用与使用教程 Python中pass的作用 空语句 do nothing 保证格式完整 保证语义完整 以if语句为例,在c或c++/java中: if(true) ; //d ...

  9. python中括号的作用_python中中括号

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 在python语言中最常见的括号有三种,分别是:小括号().中括号:代表list ...

最新文章

  1. R语言ggplot2可视化抑制可视化网格中的竖线输出、抑制可视化网格中的横线线输出、抑制背景网格输出实战
  2. Gartner 发布《2017 年新兴技术成熟度曲线图》
  3. 卷进大厂系列之LeetCode刷题笔记:反转链表(简单)
  4. getname java_关于java:只获取类Class.getName()的名称
  5. node-GetPOST
  6. 如何通过调试的方式搞清楚Angular createEmbeddedView具体创建的UI元素是什么
  7. python从视频中提取音频_提取视频中的音频——python三行程序搞定!
  8. Bzoj1051 受欢迎的牛
  9. Java面试常考的面试题整理
  10. java开发五年面试经验_只有经验丰富的开发人员才能教您有关Java的5件事
  11. JAXB众所周知的秘密
  12. python输出子列表_python利用递归函数输出嵌套列表的每个元素
  13. 如何卸载服务器的系统,卸载服务器的操作系统
  14. 我爱计算机视觉干货集锦分类汇总(2019年1月20日)
  15. 【POJ1088】滑雪
  16. android高效模拟器,51模拟器
  17. 利用opencv 做一个疲劳检测系统(2)
  18. python的sorted用法_python的sorted用法详解
  19. 5G云游戏革命风云已起,各方势力谁执牛耳
  20. MPEG-4与H264区别,编码及应用

热门文章

  1. linux中echo的使用方法
  2. 语法分析-C语言程序
  3. Visio显示不完整
  4. 使用 React和webpack开发和打包发布
  5. Python 换行符
  6. [linux]Ubuntu12.1下打开terminal的方式
  7. vim 高亮显示php代码
  8. createtrackbar函数_【3】OpenCV图像处理模块(10)inRange函数实现阈值化,HSV图像分割...
  9. 数据仓如何支撑应用?
  10. oracle必须声明标识符函数,引用变量时需要必须声明标识符