1. 程式人生 > >python(@property,setter,deleter)

python(@property,setter,deleter)

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屬性,無法執行刪除操作