python裝飾器之屬性 @property與 @setter

 @property可以將方法僞裝爲屬性,供外部直接調用賦值。

因此,爲防止賦值錯誤,其內置了setter方法,可以直接做異常判斷

注意: @property裝飾的對象與@setter對象必須同名

這樣做的好處是,減少了大量重複代碼,減少代碼的修改與維護量。

class Student(object):
    def __init__(self,name,score):
        self.name = name
        self.__score = score
    @property                        #裝飾了getter方法(score)
    def score(self):
        return self.__score
    @score.setter              #被裝飾的score中帶有setter方法,將檢查方法變成屬性
    def score(self,score):
        if not isinstance(score,int):
            raise ValueError('score must be a Integer')
        if score < 0 or score > 100:
            raise ValueError('score must between 0~100!!!')
        self.__score = score
s = Student('張三',59)                           #實例化不會觸發
s.score = 20                        #修改值時觸發檢查屬性,將報錯,值溢出
print(s.score)

 

打印結果:20

 

 

 

 

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