python(@property,setter,deleter)
阿新 • • 發佈:2019-02-08
class Women(object): def __init__(self, age): # 執行age函式,給_age屬性賦值 self.age = age def set_age(self,value): if not isinstance(value,int): raise TypeError('age must be a int value !') self._age = value @property def age(self): return self._age @age.setter def age(self, value): # 判斷傳遞過來的值是否為整數型別,不是整數型別直接丟擲異常 if not isinstance(value, int): raise TypeError('age must be a int value !') self._age = value # 判斷當前物件的年齡是否大於等於 if self._age >= 18: # 新增一個屬性,表示是否成年 self.is_ok = True print('你已成年') else: self.is_ok = False print('未成年!') # @age.deleter 裝飾器相當於給age函式綁定了一個刪除屬性的功能 @age.deleter def age(self): # 在刪除屬性之前,判斷是否擁有這個屬性 if hasattr(self, '_age'): del self._age print('成功刪除_age屬性!') else: print('%s沒有_age屬性,無法執行刪除操作'%self) w = Women(0) print(w.age,w.is_ok) w.age = 18 print(w.age,w.is_ok) del w.age 執行結果:成功刪除_age屬性! del w.age 執行結果: <__main__.Women object at 0x0000000000B9BBA8>沒有_age屬性,無法執行刪除操作