廖老師的部落格連結如下,一開始沒看懂,蒐羅了一大堆,有點感覺了

其實@property裝飾器就是把class的方法變成屬性,見下面這個class,它有兩個私有屬性。

通過第一個@property和第二個@score.setter,我們可以像訪問屬性一樣來呼叫類裡面的方法,例如:

s=Student("David",99)

s.score = 100

至於用這種裝飾器的原因,我想,就是為了簡潔吧,直接用屬性賦值的方式,執行了方法。Python 肯定是個懶人發明的。

class Student(object):

    def __init__(self,name,score):
        self.__name = name
        self.__score = score

    @property
    def score(self):
        return self.__score

    @score.setter
    def score(self,value):
        if not isinstance(value,int):
            raise ValueError("invalid score!!!")
        elif value < 0 or value > 100:
            raise ValueError("score must be between [0,100]!!!")
        else:
            self.__score = value

    @property
    def name(self):
        return self.__name