@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