python property作用_python中@property的作用和getter setter的解释
@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的解释相关推荐
- python wraps模块_python中 wraps 的作用
这里使用两段代码比较加入wraps装饰器后,函数打印的结果对比: 新建文件名:Testword 代码1:不加wraps装饰器 # coding=utf-8 from functools import ...
- new to python什么意思_Python中__new__的作用
__new__ 的作用 依照Python官方文档的说法,__new__方法主要是当你继承一些不可变的class时(比如int, str, tuple), 提供给你一个自定义这些类的实例化过程的途径.还 ...
- python的property用法_Python 中@property的用法
class Person(object): def init(self, name, age): self.__name = name self.__age = age def get_age_fun ...
- python里dir是什么意思_python中dir什么作用
python中dir的作用是:1.dir函数传入数据类型返回该数据类型的所有内置方法:2.dir函数传入模块名返回该模块的所有属性和方法. dir() 内置函数的作用 python 内置方法有很多,无 ...
- python中的pass语句_Python中pass的作用与使用代码示例
本篇文章小编给大家分享一下Python中pass的作用与使用代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. Python中pass的作用 空语 ...
- python中property方法有用_python中@property和property函数常见使用方法示例
本文实例讲述了python中@property和property函数常见使用方法.分享给大家供大家参考,具体如下: 1.基本的@property使用,可以把函数当做属性用 class Person(o ...
- super在python中是什么意思_python中super()的作用是什么
python中super()的作用是什么 发布时间:2020-08-13 13:59:16 来源:亿速云 阅读:112 作者:小新 这篇文章主要介绍python中super()的作用是什么,文中介绍的 ...
- python中的pass是什么意思_Python中pass的作用与使用教程
Python中pass的作用与使用教程 Python中pass的作用 空语句 do nothing 保证格式完整 保证语义完整 以if语句为例,在c或c++/java中: if(true) ; //d ...
- python中括号的作用_python中中括号
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 在python语言中最常见的括号有三种,分别是:小括号().中括号:代表list ...
最新文章
- R语言ggplot2可视化抑制可视化网格中的竖线输出、抑制可视化网格中的横线线输出、抑制背景网格输出实战
- Gartner 发布《2017 年新兴技术成熟度曲线图》
- 卷进大厂系列之LeetCode刷题笔记:反转链表(简单)
- getname java_关于java:只获取类Class.getName()的名称
- node-GetPOST
- 如何通过调试的方式搞清楚Angular createEmbeddedView具体创建的UI元素是什么
- python从视频中提取音频_提取视频中的音频——python三行程序搞定!
- Bzoj1051 受欢迎的牛
- Java面试常考的面试题整理
- java开发五年面试经验_只有经验丰富的开发人员才能教您有关Java的5件事
- JAXB众所周知的秘密
- python输出子列表_python利用递归函数输出嵌套列表的每个元素
- 如何卸载服务器的系统,卸载服务器的操作系统
- 我爱计算机视觉干货集锦分类汇总(2019年1月20日)
- 【POJ1088】滑雪
- android高效模拟器,51模拟器
- 利用opencv 做一个疲劳检测系统(2)
- python的sorted用法_python的sorted用法详解
- 5G云游戏革命风云已起,各方势力谁执牛耳
- MPEG-4与H264区别,编码及应用