首頁 > 軟體

Python中的getter和setter的方法使用詳解

2022-12-07 14:00:47

本文主要內容:

  • 解釋setter和getter的使用方法解釋@property裝飾器的妙用
  • 在python中,setter和getter方法並不像其它程式語言中的那樣。基本上,在物件導向程式語言中,使用setter和getter方法的主要目的是為了確保資料的封裝。不像其它物件導向程式語言,python中的私有變數並不是真正的隱藏欄位。在python中,通常在以下情況會用到setter和getter方法:
  • 在獲取或者設定屬性值的時候使用setter和getter方法為其新增驗證邏輯避免對類的某些欄位直接存取,比如類的私有變數不應該被外部呼叫者直擊存取或者修改

使用普通函數實現setter和getter方法
要實現setter和getter屬性,只是定義普通方法get()和set()並不能反產生任何特殊的行為,例如:

class Student(object):
    def __int(self, age=0):
        self._age = age
    
    # getter方法
    def get(self):
        return self._age
    
    # setter方法
    def set(self, value):
        self._age = value
        
xiaoming = Student()
# 使用setter方法設定age
xiaoming.set(20)
# 使用getter方法返回age
print(xiaoming.get())
print(xiaoming._age)

輸出:

20
20

在上面程式碼中,set_age()和get_age()方法與普通方法並沒有什麼兩樣,那麼如何實現像getter和setter一樣的功能呢?這就要用到python中的特殊方法property()。

使用property()方法來實現setter和getter的行為
property()是python中的一個內建方法,它建立並返回一個屬性物件。一個屬性物件有三個方法,getter()、setter()和delete()。property()內建方法有四個引數,property(fget,fset, fdel, doc)。fget是一個用於獲取屬性值的函數,fset是一個用於設定屬性值的函數,fdel是一個用於刪除屬性的函數,doc用於為屬性建立檔案說明。一個屬性兌現有三個方法,getter()、setter()和delete()分別制定fget、fset、fdel。

class Adult(object):
    def __int(self):
        self.__age = 0
    
    # 獲取屬性_age的值
    def get_age(self):
        print('getter() method called')
        return self.__age
    
    # 設定屬性_age的值
    def set_age(self, value):
        print('setter() method called')
        self.__age = value
    
    # 刪除屬性_age
    def del_age(self):
        del self.__age
        
    age = property(get_age, set_age, del_age)

laowang = Adult()
laowang.age = 60
print(laowang.age)

輸出:

setter() method called
getter() method called
60

在上面的程式碼中,age就是一個屬性物件,它保證了對私有變數的安全存取。

使用@property裝飾器來實現setter和getter的行為
除了上面使用property()的方法來實現getter、setter方法的行為,在python中還可以裝飾器@property來實現。@property是python的一個內建裝飾器,使用裝飾器的目的是改變類的方法或者屬性,這樣呼叫者就無需在程式碼中做任何改動。

class Adult(object):    
    def __init__(self):
        self.__age = 0
    
    @property
    def age(self):
        print('getter() method called')
        return self.__age
        
    @age.setter
    def age(self, value):
        if value < 18:
            raise ValueError('Sorry, you are a child, games not allowed')
        print('setter() method called')
        self.__age = value
        
xiaoli = Adult()
xiaoli.age = 19
print(xiaoli.age)

輸出:

setter() method called
getter() method called
19

上面的程式碼清晰地展示瞭如何用pythonic的方式使用@property裝飾器實現setter和getter屬性。同時實現了對屬性賦值時的有效性檢查。

到此這篇關於Python的getter和setter的方法使用詳解的文章就介紹到這了,更多相關Python的getter和setter的方法使用內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com