
在接触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的用法及含义全面解析所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)