上節詳細介紹了利用@property裝飾器定義屬性的語法,本節經過具體案例來進一步說明。
1、 案例說明
本節的案例是定義Rectangle(長方形)類,爲了說明問題,除構造函數外,其餘方法都只定義了長度屬性的操做。包括三個完整的裝飾器,若是你們想試一下少一個操做方法的裝飾器,能夠直接把對應裝飾器去除便可。ide
2、 案例代碼
1. 定義類Rectangle函數
class Rectangle(): def __init__(self,length,width): self.width,self.length = width,length @property #定義getter裝飾器 def len(self): print("execute getLen") return self.length @len.setter #定義setter裝飾器 def len(self,length): print("execute setLen") self.length=length @len.deleter #定義deleter 裝飾器 def len(self):self.length=0
2. 定義實例對象並執行相關操做(交互模式下執行)測試
rect = Rectangle(5,3) rect.len #獲取長方形的長 rect.len=10 #設置長方形的長 rect.len #獲取長方形的長 del rect.len #刪除長方形的長
從下面的執行截圖可看出,相關操做都是調用對應的方法執行,只是方法的名字必須是固定的屬性名。
3、 案例截圖
4、 異常狀況的代碼和截圖
與《第7.25節 Python案例詳解:使用property函數定義與實例變量同名的屬性會怎樣?》同樣,老猿也測試了屬性名相同時的異常狀況,證明該異常狀況與7.25節介紹的異常狀況徹底同樣。相關代碼和執行的部分截圖以下:code
#property裝飾器設置與類變量的同名屬性 class Rectangle(): def __init__(self,length,width): self.width,self.length = width,length @property def length(self): print("execute getLen") return self.length @length.setter def length(self,length): print("execute setLen") self.length=length @length.deleter def length(self):self.length=0 rect = Rectangle(5,3)
執行截圖:對象
經過以上代碼的執行在此驗證了屬性名不能與實例變量同名,除非是使用一個自己沒有任何數據操做的實例變量。
本節老猿結合案例詳細介紹了property裝飾器的使用,並舉例說明裝飾器定義的屬性不能和類的實例變量同名,不然可能會引起異常。截止到本節,類和類型的基礎知識講了大部分,還有部分後面再開單獨章節介紹,本章到此結束。
blog