python property 的理解以及它的坑

2021-10-02 01:18:58 字數 1499 閱讀 4903

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」 ,你不用擔心是否用左手還是右手,甚至是不是手都沒關係,你碰到他就可以任意使用這個心法,你說屌不屌~

python property 私有屬性

加有 變數名 的私有屬性直接訪問不了,用get.和set.方法,提供個介面進行訪問。property的使用 私有屬性,用來簡化訪問私有屬性,提供開放性介面,共外界訪問 class student def init self,name,age self.name name self.age age d...

python property 的詳細使用方法

property 有兩種使用方式裝飾器方式 官方幫助文件 property fget none,fset none,fdel none,doc none property attribute decorators make defining new properties or modifying e...

Python property的理解和使用

重看狗書,看到對user表定義的時候有下面兩行 property def password self raise attributeerror password is not a readable attribute password.setter def password self,passwor...