Python中的Getter和Setter
為了實現資料封裝的目的,大多數面向物件的語言都使用getter和setter方法。這是因為我們希望將物件類的屬性隱藏起來,以免其他類的其它方法意外修改資料。
顧名思義,getter方法用於訪問私有屬性或獲取私有屬性的值,setter方法用於更改或設定私有屬性的值。
訪問私有屬性
下面我們編寫程式碼建立一個類,初始化它並訪問它的變數,而無需建立任何附加方法。
示例
class year_graduated: def __init__(self, year=0): self._year = year # Instantiating the class grad_obj = year_graduated() #Printing the object print(grad_obj) #Printing the object attribute print(grad_obj.year)
輸出
執行上述程式碼將得到以下結果:
<__main__.year_graduated object at 0x00F2DD50> 0
第一個print語句給出建立的物件的詳細資訊,第二個print語句給出私有屬性的預設值。
使用getter和setter
在下面的示例中,我們將建立一個類,初始化它,然後為每個屬性新增getter和setter方法。然後透過例項化類並使用這些getter和setter方法來訪問這些變數。因此,您可以將您的邏輯隱藏在setter方法中。
示例
class year_graduated: def __init__(self, year=0): self._year = year # getter method def get_year(self): return self._year # setter method def set_year(self, a): self._year = a grad_obj = year_graduated() # Before using setter print(grad_obj.get_year()) # After using setter grad_obj.set_year(2019) print(grad_obj._year)
輸出
執行上述程式碼將得到以下結果
0 2019
將屬性設為私有
在接下來的示例中,我們將看到如何將方法設為私有,以便外部呼叫函式無法操作其中的變數。它們只能由類內部的函式操作。透過在它們前面加上兩個下劃線,可以將它們設為私有。
示例
class year_graduated: def __init__(self, year=32): self._year = year # make the getter method def get_year(self): return self.__year # make the setter method def set_year(self, a): self.__year = a grad_obj = year_graduated() print(grad_obj._year) # Before using setter print(grad_obj.get_year()) # # # After using setter grad_obj.set_year(2019) print(grad_obj._year)
輸出
執行上述程式碼將得到以下結果
32 AttributeError: 'year_graduated' object has no attribute '_year_graduated__year'
從私有方法讀取值
現在,我們可以使用property方法,無需使用getter方法即可訪問私有屬性值。
示例
class year_graduated: def __init__(self, year=32): self._year = year @property def Aboutyear(self): return self.__year @Aboutyear.setter def Aboutyear(self, a): self.__year = a grad_obj = year_graduated() print(grad_obj._year) grad_obj.year = 2018 print(grad_obj.year)
輸出
執行上述程式碼將得到以下結果
32 2018
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP