裝飾器的一種類型是屬性 getter 和 setter。這些裝飾器允許對類別實例中的變數進行受控存取。
屬性取得器和設定器專門設計用於物件導向程式設計中的屬性控制。它們與函數裝飾器不同,因為它們用於類別屬性(請在此處查看我關於函數裝飾器的帖子)。
函數裝飾器和屬性 getter 和 setter 裝飾器都使用可重複使用程式碼修改程式碼並使用“@”語法。它們都改變了程式碼的功能。
好吧,讓我們開始吧。
屬性 getter 和 setter 應用於類別中的方法來定義各種行為。 setter 將屬性設為值,getter 從類別中取得屬性。此屬性首先設定。
讓我們來看一個例子,然後我們將其分解:
class Shoe: def __init__(self, brand = "Adidas", size = 9): self.brand = brand self.size = size self._condition = "New" @property def size(self): """The size property""" return self._size @size.setter def size(self, size): """size must be an integer""" if isinstance(size, int): self._size = size else: print("size must be an integer") def cobble(self): """Repairs the shoe and sets the condition to 'New'.""" self.condition = "New" print("Your shoe is as good as new!") @property def condition(self): """The condition property""" return self._condition @condition.setter def condition(self, condition): self._condition = condition
讓我們來看看這段程式碼:
一些屬性(條件、大小)前的下劃線向開發者表明它們是私有的;它們特定於 Shoe 類的每個實例(每隻鞋,小寫)。
您可能會注意到條件和大小的實例化方式不同。 self._condition = "New" 表示鞋類的每個實例(或物件)都以「New」條件進行實例化。對size屬性也做同樣的事情,但是不寫成self._size = 9這樣會觸發setter屬性驗證,因為size需要是一個整數(這是一個稱為驗證的過程)。我們直接設定每個鞋物件的條件,而不是透過屬性 setter 和 getter 方法來運行它。
cobble 方法不需要裝飾器,因為它只是執行一個操作,而不是取得/設定每個鞋子物件的屬性。
讓我們對程式碼進行最後一項更改。例如,如果我們想確保 size 屬性以後不能改變怎麼辦?畢竟,鞋子的尺寸並不會真正改變,不是嗎?
我們可以使用 hasattr() 函數對每個鞋子物件執行檢查。它是否具有由“_size”的存在指示的私有大小屬性?如果是這樣,則無法更改。這是實現的程式碼:
@size.setter def size(self, size): """size must be an integer and can't be changed once set""" if hasattr(self, '_size'): raise AttributeError("Can't change size once set") if isinstance(size, int): self._size = size else: raise ValueError("size must be an integer")
屬性 setter 和 getter 掌握起來有點困難,但一旦理解了,你就會像專業人士一樣編寫 Python 程式碼!
來源:
熨斗學校材料
以上是Python 中的裝飾器 Getter 和 Setter的詳細內容。更多資訊請關注PHP中文網其他相關文章!