python的property用法_python @property的用法及含义全面解析
在接触python时最开始接触的代码,取长方形的长和宽,定义一个长方形类,然后设置长方形的长宽属性,通过实例化的方式调用长和宽,像如下代码一样。
class Rectangle(object):
def __init__(self):
self.width =10
self.height=20
r=Rectangle()
print(r.width,r.height)
此时输出结果为10 20
但是这样在实际使用中会产生一个严重的问题,__init__ 中定义的属性是可变的,换句话说,是使用一个系统的所有开发人员在知道属性名的情况下,可以进行随意的更改(尽管可能是在无意识的情况下),但这很容易造成严重的后果。
class Rectangle(object):
def __init__(self):
self.width =10
self.height=20
r=Rectangle()
print(r.width,r.height)
r.width=1.0
print(r.width,r.height)
以上代码结果会输出宽1.0,可能是开发人员不小心点了一个小数点上去,但是会系统的数据错误,并且在一些情况下很难排查。
这是生产中很不情愿遇到的情况,这时候就考虑能不能将width属性设置为私有的,其他人不能随意更改的属性,如果想要更改只能依照我的方法来修改,@property就起到这种作用(类似于java中的private)
class Rectangle(object):
@property
def width(self):
#变量名不与方法名重复,改为true_width,下同
return self.true_width
@property
def height(self):
return self.true_height
s = Rectangle()
#与方法名一致
s.width = 1024
s.height = 768
print(s.width,s.height)
(@property使方法像属性一样调用,就像是一种特殊的属性)
此时,如果在外部想要给width重新直接赋值就会报AttributeError: can't set attribute的错误,这样就保证的属性的安全性。
同样为了解决对属性的操作,提供了封装方法的方式进行属性的修改
class Rectangle(object):
@property
def width(self):
# 变量名不与方法名重复,改为true_width,下同
return self.true_width
@width.setter
def width(self, input_width):
self.true_width = input_width
@property
def height(self):
return self.true_height
@height.setter
#与property定义的方法名要一致
def height(self, input_height):
self.true_height = input_height
s = Rectangle()
# 与方法名一致
s.width = 1024
s.height = 768
print(s.width,s.height)
此时就可以对“属性”进行赋值操作,同样的方法还del,用处是删除属性,写法如下,具体实现不在赘述。
@height.deleter
def height(self):
del self.true_height
总结一下@property提供了可读可写可删除的操作,如果像只读效果,就只需要定义@property就可以,不定义代表禁止其他操作。
以上这篇python @property的用法及含义全面解析就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
python的property用法_python @property的用法及含义全面解析相关推荐
- python launcher怎么使用_python的launcher用法知识点总结
python的launcher用法知识点总结,版本,启动器,文件,范围内,适用于 python的launcher用法知识点总结 易采站长站,站长之家为您整理了python的launcher用法知识点总 ...
- python中scale的用法_Python Decimal scaleb()用法及代码示例
Decimal#scaleb():scaleb()是一个Decimal类方法,该方法将第二个值与其exp相加后返回第一个操作数. 用法:Decimal.scaleb() 参数:十进制值 返回:将第二个 ...
- python中insert()函数的用法_Python list insert()用法及代码示例
insert()是Python中的内置函数,可将给定元素插入列表中的给定索引. 用法: list_name.insert(index, element) 参数: index - the index a ...
- python中shutil.copyfile的用法_Python shutil.copyfile()用法及代码示例
Python中的Shutil模块提供了许多对文件和文件集合进行高级操作的功能.它属于Python的标准实用程序模块.此模块有助于自动执行文件和目录的复制和删除过程. shutil.copyfile() ...
- python的datetime举例_Python datetime.timedelta()用法及代码示例
Python timedelta()函数存在于datetime库中,该函数通常用于计算日期差,也可以用于Python中的日期操作.这是执行日期操作的最简单方法之一. 用法: datetime.time ...
- python字典的用法_Python字典的用法详解(附示例)
本篇文章给大家带来的内容是关于Python字典的用法详解(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 字典的表现形式为:{key:value},键和值之间用冒号分隔,每个 ...
- python asyncio回调函数_python回调函数用法实例分析
python回调函数用法实例分析 本文实例讲述了python回调函数用法.分享给大家供大家参考.具体分析如下: 软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用.回调和异步 ...
- python中mean的用法_Python statistics mean()用法及代码示例
先决条件:统计函数简介 在数据分析和统计方面,Python是一种非常流行的语言.幸运的是,Python3提供了statistics模块,它具有非常有用的功能,例如mean(),median(),mod ...
- python中print的用法_python中print用法
print用法 参考文档: https://blog.csdn.net/sinat_28576553/article/details/81154912 目录 一.print()函数概述 二.变量的输出 ...
最新文章
- springmvc mybatis 做分页sql 语句
- 计算机专业校企合作实施方案,校企合作-校企合作、工学结合机制实施方案
- CAD/CAM编程排料软件提高钣金制造业竞争力
- c语言源码转流程图,C语言算法第5章源代码以及流程图.doc
- 用Matlab处理信号从入门到入土1
- 在微型计算机汉字系统中一个汉字机内码,一个汉字的机内码在计算机中用2个字节表示。...
- 淘宝网登录滑动验证报错解决办法--改参数 让淘宝检测失败 2021-4
- 怎么在微云服务器找一个文件,微云文件在哪里打开_怎么快速找到微云文件
- 概率论与数理统计(定义定理总结)
- Pycharm2017补丁破解
- 韩非子《五蠹》全文及译文
- shell语法中的空格和分号,引号
- 赠书赠券:《大话计算机》
- 如何在cPanel/WHM服务器上安装PostgreSQL
- 软件开发过程与项目管理(12.软件项目合同计划)
- C语言中使用rand()函数产生随机数用法
- 最小系统板 STM32入门,点亮 LED 灯(STM32F103C6T6)
- 上汽集团、张江高科和阿里巴巴集团联合打造智己汽车
- 微信小程-截取小数点的位数
- 通达信波段王指标公式主图_通达信金波段主图指标公式
热门文章
- golang mysql商业用例_完美起航-golang操作mysql用例
- do msgbox loop_【连载1】DDC模块 DO点与强电电气柜的接口形式
- 【Java】6.7 内部类
- 面试官:谈谈你对零拷贝的理解~
- Android中的自定义view和自定义属性TypedArray的使用
- aop对请求后端的参数修改_Spring Aop 修改目标方法参数和返回值
- 剑指offer(26-33题)详解
- 数据结构与算法——二叉平衡树(AVL树)详解
- Android数据库LitePal的存储操作
- C语言基础-基本算法