裝飾器 之@property 裝飾函數

 # @property 負責裝飾對象函數,讓其生成對應的setter和getter 函數
#    調用的時候,直接能夠使用對象名.函數名,調用python

'''
判斷輸入參數是否是想要的類型
普通的修改、添加屬性已經不能知足
建立類變量來判斷,
   @property
'''
class People(object):
    def __init__(self,name,age):
        # 目的,執行age.setter函數,給_age屬性賦值age
        self.age = age
        self.name = name
    @property
    #@property 會將age函數聲明爲一個getter 函數,getter函數,通常用來得到數據得操做
    #獲取數據
    def age(self):
        return self._age
    # 修改屬性值
    # 修改屬性值: 對象.函數名 = 參數值,來設置某些數據
    @age.setter
    def age(self,value):
        if not isinstance(value,int):
            raise TypeError('value must be a int!')
        self._age = value
        if self._age < 18:
            self.is_ok = True
            print('未成年')
        else:
            self.is_ok = False
            print('成年人')
    @age.deleter
    #@age.deleter 裝飾器至關於給age 函數綁定一個刪除屬性的功能
    def age(self):
        if  hasattr(self,'_age'):
        #檢查是否擁有這屬性
            del self._age
        else:
            print('沒有該屬性')
p1 = People('張三',34)
print(p1.name)
# 經過調用@property,函數獲取屬性值,也能夠是私有屬性
print(p1.age)
p1.age = 68
# 利用@age.setter類函數,判斷添加的時候參數類型
print(p1.age)
del p1.age
del p1.age
相關文章
相關標籤/搜索