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

更新於:2020年1月2日

15K+ 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.