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

  

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

        类矩形(对象):   def __init__(自我):   自我。宽度=10   self.height=20   r=矩形()   打印(r.width r.height)      

  

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

        类矩形(对象):   def __init__(自我):   自我。宽度=10   self.height=20   r=矩形()   打印(r.width r.height)   r.width=1.0   打印(r.width r.height)      

以上代码结果会输出宽1.0,可能是开发人员不小心点了一个小数点上去,但是会系统的数据错误,并且在一些情况下很难排查。

  

这是生产中很不情愿遇到的情况,这时候就考虑能不能将宽度属性设置为私有的,其他人不能随意更改的属性,如果想要更改只能依照我的方法来修改,@ property就起到这种作用(类似于java中的私有)

        类矩形(对象):   @ property   def宽度(自我):   #变量名不与方法名重复,改为true_width,下同   返回self.true_width      @ property   def高度(自我):   返回self.true_height   s=矩形()   #与方法名一致   年代。宽度=1024   年代。身高=768   打印(s.width s.height)   之前      

  

此时,如果在外部想要给宽度重新直接赋值就会报AttributeError:不能设置属性的错误,这样就保证的属性的安全性。

  

同样为了解决对属性的操作,提供了封装方法的方式进行属性的修改

        类矩形(对象):   @ property   def宽度(自我):   #变量名不与方法名重复,改为true_width,下同   返回self.true_width   @width.setter   def宽度(自我,input_width):   自我。true_width=input_width   @ property   def高度(自我):   返回self.true_height   @height.setter   #与财产定义的方法名要一致   def高度(自我,input_height):   自我。true_height=input_height   s=矩形()   #与方法名一致   年代。宽度=1024   年代。身高=768   打印(s.width s.height)      

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

        @height.deleter   def高度(自我):   德尔self.true_height      

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

  

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

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