python @property的用法及含义全面解析

python @property的用法及含义全面解析,第1张

概述在接触python时最开始接触的代码,取长方形的长和宽,定义一个长方形类,然后设置长方形的长宽属性,通过实例化的方式调用长和宽,像如下代码一样。

在接触python时最开始接触的代码,取长方形的长和宽,定义一个长方形类,然后设置长方形的长宽属性,通过实例化的方式调用长和宽,像如下代码一样。

class Rectangle(object):  def __init__(self):    self.wIDth =10    self.height=20r=Rectangle()print(r.wIDth,r.height)

此时输出结果为10 20

但是这样在实际使用中会产生一个严重的问题,__init__ 中定义的属性是可变的,换句话说,是使用一个系统的所有开发人员在知道属性名的情况下,可以进行随意的更改(尽管可能是在无意识的情况下),但这很容易造成严重的后果。

class Rectangle(object):  def __init__(self):    self.wIDth =10    self.height=20r=Rectangle()print(r.wIDth,r.height)r.wIDth=1.0print(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_heights = Rectangle()#与方法名一致s.wIDth = 1024s.height = 768print(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_heights = Rectangle()# 与方法名一致s.wIDth = 1024s.height = 768print(s.wIDth,s.height)

此时就可以对“属性”进行赋值 *** 作,同样的方法还del,用处是删除属性,写法如下,具体实现不在赘述。

@height.deleterdef height(self):    del self.true_height

总结一下@property提供了可读可写可删除的 *** 作,如果像只读效果,就只需要定义@property就可以,不定义代表禁止其他 *** 作。

以上这篇python @property的用法含义全面解析就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持编程小技巧。

您可能感兴趣的文章:Python解析json之ValueError: Expecting property name enclosed in double quotes: line 1 column 2(char 1)实例讲解Python编程中@property装饰器的用法Python黑魔法@property装饰器的使用技巧解析Python Property属性的2种用法介绍Python的@property装饰器的用法Python中用Descriptor实现类级属性(Property)详解python的描述符(descriptor)、装饰器(property)造成的一个无限递归问题分享Python中property属性实例解析 总结

以上是内存溢出为你收集整理的python @property的用法及含义全面解析全部内容,希望文章能够帮你解决python @property的用法及含义全面解析所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1200613.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-04
下一篇2022-06-04

发表评论

登录后才能评论

评论列表(0条)

    保存