property裝飾器的使用方法詳解

2021-10-07 03:22:32 字數 1754 閱讀 9686

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

@property 的語法格式如下:

@property

def 方法名(self)

**塊例如,定義乙個矩形類,並定義用 @property 修飾的方法操作類中的 area 私有屬性,**如下:

class rect:

def __init__(self,area):

self.__area = area

@property

def area(self):

return self.__area

rect = rect(30)

#直接通過方法名來訪問 area 方法

print("矩形的面積是:",rect.area)

執行結果為:

矩形的面積為: 30

上面程式中,使用 @property 修飾了 area() 方法,這樣就使得該方法變成了 area 屬性的 getter 方法。需要注意的是,如果類中只包含該方法,那麼 area 屬性將是乙個唯讀屬性。

也就是說,在使用 rect 類時,無法對 area 屬性重新賦值,即執行如下**會報錯:

rect.area = 90

print("修改後的面積:",rect.area)

執行結果為:

traceback (most recent call last):

file "c:\users\mengma\desktop\1.py", line 10, in

rect.area = 90

attributeerror: can't set attribute

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

@方法名.setter

def 方法名(self, value):

**塊例如,為 rect 類中的 area 方法新增 setter 方法,**如下:

@area.setter

def area(self, value):

self.__area = value

再次執行如下**:

rect.area = 90

print("修改後的面積:",rect.area)

執行結果為:

修改後的面積: 90

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

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

@方法名.deleter

def 方法名(self):

**塊例如,在 rect 類中,給 area() 方法新增 deleter 方法,實現**如下:

@area.deleter

def area(self):

self.__area = 0

然後執行如下**:

del rect.area

print("刪除後的area值為:",rect.area)

執行結果為:

刪除後的area值為: 0

裝飾器 property的使用總結

0 裝飾器的兩個方法 訪問器 getter 和修改器 setter 1 不使用裝飾器,也不設定私人屬性,類中的屬性值可以直接修改 2 不使用裝飾器,使用單下劃線宣告為私人屬性,類中的屬性值不可以直接修改,但加上單下劃線後可以修改。使用單下劃線就相當於在原來的名字前面加個下劃線,換了乙個名字而已 3 ...

內建裝飾器 property

使用 property 閱讀 4164 內建裝飾器 property的基本功能就是把類中的方法當作屬性來訪問 在繫結屬性時,如果我們直接把屬性暴露出去,雖然寫起來很簡單,但是,沒辦法檢查引數,導致可以把成績隨便改 s student s.score 9999這顯然不合邏輯。為了限制score的範圍,...

property裝飾器詳解

property裝飾器,看了好幾個教程都不太理解,知道發現了知乎的這篇好文python property的介紹與使用,終於懂了!下面結合github上的乙個例子,解釋一下這個裝飾器 class person object def init self,name,age 初始化 self.name na...