Python 中@property裝飾器簡介

  • 給屬性添加getter方法

既要保護類的封裝特性,又要讓開發者可以使用“對象.屬性”的方式操作類屬性,除了使用 property() 函數,python還提供了 @property 裝飾器。通過 @property 裝飾器,可以直接通過方法名來訪問方法,不需要在方法名後添加一對“()”小括號。

@property 的語法格式如下:

@property
def 方法名(self)
    代碼塊

例如,定義一個矩形類,並定義用 @property 修飾的方法,代碼如下:

class Rect:

    def __init__(self,area):
        self.__area = area

    @property
    def area(self):
        return self.__area

rect = Rect(30)

#直接通過方法名來訪問 area 屬性的值,自動調用getter方法
print("矩形的面積是:",rect.area)

上面程序中,使用 @property 修飾了 area() 方法,這樣就使得該方法變成了 area 屬性的 getter 方法。需要注意的是,如果類中只包含該方法,那麼 area 屬性將是一個只讀屬性。也就是說,在使用 Rect 類時,無法對 area 屬性重新賦值。

  • 給屬性添加setter方法

而要想實現修改 area 屬性的值,還需要爲 area 屬性添加 setter 方法,這就需要用到 setter 裝飾器,它的語法格式如下:

@方法名.setter
def 方法名(self, value):
    代碼塊

例如,爲 Rect 類中的 area 方法添加 setter 方法,代碼如下:

class Rect:

    def __init__(self,area):
        self.__area = area

    @property
    def area(self):
        return self.__area

    @area.setter
    def area(self, value):
        self.__area = value

rect = Rect(30)

#給area屬性重新賦值,自動調用setter方法
rect.area = 90

#直接通過方法名來訪問 area 屬性的值,自動調用getter方法
print("矩形的面積是:",rect.area)

這樣,area 屬性就有了 getter 和 setter 方法,該屬性就變成了具有讀寫功能的屬性。

  • 給屬性添加 deleter 方法

除此之外,還可以使用 deleter 裝飾器來刪除指定屬性,其語法格式爲:

@方法名.deleter
def 方法名(self):
    代碼塊

例如,在 Rect 類中,給 area() 方法添加 deleter 方法,實現代碼如下:

class Rect:

    def __init__(self,area):
        self.__area = area

    @property
    def area(self):
        return self.__area

    @area.setter
    def area(self, value):
        self.__area = value

    @area.deleter
    def area(self):
        self.__area = 0

rect = Rect(30)

#給area屬性重新賦值,自動調用setter方法
rect.area = 90

#刪除area屬性值,自動調用deleter方法
del rect.area

#直接通過方法名來訪問 area 屬性的值,自動調用getter方法
print("矩形的面積是:",rect.area)

此時輸出的area值爲0

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