python @property 的理解以及它的坑

1、@property就是既拥有set、get方法的灵活性,又具有属性直接赋值取值的简便性

2、@property的属性名必须有下划线,不然会报错

3、在一个方法前加上@property之后,你的方法就会自动拥有‘get’直接取值的能力,以及可赋值的属性

硬要理解的话,下面两段代码效果是一样的

  @property
  def socre(self):
      return self._socre #注意必须得有下划线
def get_socre(self):
    return self.socre

不要纠结于没有@property他也可以被调用,它的强大就在于在调用的时候不用关注内部函数构造,你只需要知道被@prooerty装饰的方法是谁,你就可以随意的去用socre去循环赋值或取值,如果没有他,你在赋值和取值的时候需要用到不同的函数去调用实现,这就违背了python的可移植性,要知道你要理解的是如何面向对象

4、@property 使用之后,除了给 socre装上了一个‘get’取值的能力,同时也赋予了当前程序内一个可赋值的能力,就是被装饰@property的方法,同时也用了赋值的能力  @score.setter

经典例子就是如下

    @socre.setter
    def socre(self,vlaue):
        if not isinstance(vlaue,int):
            raise ValueError('the value must int')
        if vlaue < 0 or vlaue > 100:
            raise ValueError('the value must 0 ~ 100')
        self.socre = vlaue

5、我碰见有个人问我,他是怎么把每个方法给区分成,get和set的,在调用的时候又是怎么区分的?

啊~这就涉及到很深层的原理了,我们没必要知道他的内部构造,只需要知道他能够为你所用,足矣,这也是Python最受欢迎的地方,我们只要知道它的使用方式和注意事项,@property是让方法拥有了取值和赋值的能力

最后呢他的作用到底大不大?个人认为见仁见智,见到别人或同事的代码你要知道是怎么回事才是最重要的,他在调用的时候不用关注类本身内部传递方式,这也是装饰器的强大之处,并不是这个方法有多厉害,是装饰器本身在某些场景就很便捷

还是有初学者表示不太懂,我只能按照生活中可以理解的方式去理解@property,如果你还是不懂,那还是建议你重新学习一下函数吧  如下:

好比有一本武功秘籍,秘籍有两个心法,一个心法“get”用左手放在别人脑袋上可以读别人在想什么,另外一个心法"set"用右手放在别人脑袋上,可以让别人按照你的想法去做,NB吧?!
可是你每次用的时候还得去用左右手去发力,一旦你的一个手受伤了你就丢失了一个能力,而且也不方便,但是你突破了,找到了一种方式 “@property” ,你不用担心是否用左手还是右手,甚至是不是手都没关系,你碰到他就可以任意使用这个心法,你说屌不屌~

        

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值