在接触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的用法及含义全面解析相关推荐

  1. python launcher怎么使用_python的launcher用法知识点总结

    python的launcher用法知识点总结,版本,启动器,文件,范围内,适用于 python的launcher用法知识点总结 易采站长站,站长之家为您整理了python的launcher用法知识点总 ...

  2. python中scale的用法_Python Decimal scaleb()用法及代码示例

    Decimal#scaleb():scaleb()是一个Decimal类方法,该方法将第二个值与其exp相加后返回第一个操作数. 用法:Decimal.scaleb() 参数:十进制值 返回:将第二个 ...

  3. python中insert()函数的用法_Python list insert()用法及代码示例

    insert()是Python中的内置函数,可将给定元素插入列表中的给定索引. 用法: list_name.insert(index, element) 参数: index - the index a ...

  4. python中shutil.copyfile的用法_Python shutil.copyfile()用法及代码示例

    Python中的Shutil模块提供了许多对文件和文件集合进行高级操作的功能.它属于Python的标准实用程序模块.此模块有助于自动执行文件和目录的复制和删除过程. shutil.copyfile() ...

  5. python的datetime举例_Python datetime.timedelta()用法及代码示例

    Python timedelta()函数存在于datetime库中,该函数通常用于计算日期差,也可以用于Python中的日期操作.这是执行日期操作的最简单方法之一. 用法: datetime.time ...

  6. python字典的用法_Python字典的用法详解(附示例)

    本篇文章给大家带来的内容是关于Python字典的用法详解(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 字典的表现形式为:{key:value},键和值之间用冒号分隔,每个 ...

  7. python asyncio回调函数_python回调函数用法实例分析

    python回调函数用法实例分析 本文实例讲述了python回调函数用法.分享给大家供大家参考.具体分析如下: 软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用.回调和异步 ...

  8. python中mean的用法_Python statistics mean()用法及代码示例

    先决条件:统计函数简介 在数据分析和统计方面,Python是一种非常流行的语言.幸运的是,Python3提供了statistics模块,它具有非常有用的功能,例如mean(),median(),mod ...

  9. python中print的用法_python中print用法

    print用法 参考文档: https://blog.csdn.net/sinat_28576553/article/details/81154912 目录 一.print()函数概述 二.变量的输出 ...

最新文章

  1. springmvc mybatis 做分页sql 语句
  2. 计算机专业校企合作实施方案,校企合作-校企合作、工学结合机制实施方案
  3. CAD/CAM编程排料软件提高钣金制造业竞争力
  4. c语言源码转流程图,C语言算法第5章源代码以及流程图.doc
  5. 用Matlab处理信号从入门到入土1
  6. 在微型计算机汉字系统中一个汉字机内码,一个汉字的机内码在计算机中用2个字节表示。...
  7. 淘宝网登录滑动验证报错解决办法--改参数 让淘宝检测失败 2021-4
  8. 怎么在微云服务器找一个文件,微云文件在哪里打开_怎么快速找到微云文件
  9. 概率论与数理统计(定义定理总结)
  10. Pycharm2017补丁破解
  11. 韩非子《五蠹》全文及译文
  12. shell语法中的空格和分号,引号
  13. 赠书赠券:《大话计算机》
  14. 如何在cPanel/WHM服务器上安装PostgreSQL
  15. 软件开发过程与项目管理(12.软件项目合同计划)
  16. C语言中使用rand()函数产生随机数用法
  17. 最小系统板 STM32入门,点亮 LED 灯(STM32F103C6T6)
  18. 上汽集团、张江高科和阿里巴巴集团联合打造智己汽车
  19. 微信小程-截取小数点的位数
  20. 通达信波段王指标公式主图_通达信金波段主图指标公式

热门文章

  1. golang mysql商业用例_完美起航-golang操作mysql用例
  2. do msgbox loop_【连载1】DDC模块 DO点与强电电气柜的接口形式
  3. 【Java】6.7 内部类
  4. 面试官:谈谈你对零拷贝的理解~
  5. Android中的自定义view和自定义属性TypedArray的使用
  6. aop对请求后端的参数修改_Spring Aop 修改目标方法参数和返回值
  7. 剑指offer(26-33题)详解
  8. 数据结构与算法——二叉平衡树(AVL树)详解
  9. Android数据库LitePal的存储操作
  10. C语言基础-基本算法