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” ,你不用担心是否用左手还是右手,甚至是不是手都没关系,你碰到他就可以任意使用这个心法,你说屌不屌~