Property詳細解讀-python

Property(屬性函數)是一個很重要的概念在python中,那麼具體是什麼作用呢,結合程序來看更好理解。
   本篇會涉及到類的基本使用,property的使用,以及@property的使用。
    (1)首先是一個簡單的demo:
class person():
    def __init__(self,sex,age):      # 兩個屬性 sex and age
        self._sex=sex               
        self._age=age
        
    def get_info(self):
        return self._sex,self._age
    
    def set_info(self,sex,age):
        if sex=='man' or sex=='women':
            self._sex=sex
        else:
            raise Exception("illegal sex input !")
        if age<100 and age>0:
            self._age=age+1
A=person('wwomen',18)
A._age
# output 18

    大家肯定回想爲什麼要用get_info和set_info這兩種方法(方法:綁定到對象特性上面的函數,本質是函數)呢?爲什麼這麼操作,而不是直接操作,比如像下面這樣:

#通過get_info set_info 間接操作
A.set_info('man',18)
#直接操作 A._age=18 A._sex='man'

  我們也可以直接操作,也可以間接操作,但是在平時用到的時候,我們用的大都是間接操作(也就是封裝的思想),我們會加入很多限制條件,或者對屬性的運算在裏面,所以直接操作很不方便。那有了這個思想之後呢,就可以看接下來的代碼了。
 
class person():
    def __init__(self,age):
        self._age=age
        
    def get_info(self):
        return self._age
    
    def set_info(self,age):
        if age<100 and age>0:
            self._age=age+1           # 這裏爲了觀察是否調用了該方法,特意把該值加一
    age_info=property(fget=get_info,fset=set_info)    # add property method

  那麼我們加入了property,程序輸出會有什麼變化麼,看一下程序的輸出:
先定義一個實例(對象),然後我們調用了age_info,爲什麼加入property方法呢,一是可以讓age_info這個方法可以和屬性一樣進行“ .”調用,二是可以看到當我們調用age_info的時候,自動調用了get_info方法,下面給age_info複製的時候自動調用了set_info方法。
B=person(10)
B.age_info
# output  10
B.age_info=12
B.age_info
# output 13

B.age_info=12B.age_info# output 13

那麼接下來@property裝飾器就好理解了:還是直接上程序,看輸出
class person():
    def __init__(self,age):
        self._age=age
        
    @property               # 將方法改成屬性,可以直接由對象調用
    def age_info(self):
        return self._age
    
    @age_info.setter
    def age_info(self,age):
        if age<100 and age>0:
            self._age=age+1

C=person(10)
C.age_info
# output 10
C.age_info=22
C.age_info
# output 23

看到了吧,和之前一樣的效果。

所以總結來看,property就是將一種方法可以改成屬性進行' . '點調用,很大程度上方便並友好化了類的使用。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章