Python創(chuàng)建Getter和Setter的方法詳解
面向對象編程(OOP)是一種編程范式,它使很多事情變得容易,從可組合性到繼承,并允許我們更快地構建功能和程序部件。 這個范式有不同的特點; 兩個是 getter 和 setter。
類是 OOP 的基礎,通常具有每個實例唯一的變量,并且這些變量(通常稱為屬性)通過方法設置或獲取。 這些方法稱為 getter 和 setter。
這些行為在支持 OOP 的編程語言中很流行,Python 也支持它。 本文將討論如何在 Python 中創(chuàng)建 getter 和 setter。
Python 中的 Getter 和 Setter
Getters 和 Setters 是幫助我們設置類變量或屬性而無需直接訪問的方法,違背了抽象和封裝的目的。 因此,通過 getter 和 setter,我們就能夠處理類屬性。
在我們創(chuàng)建 getter 和 setter 之前,重要的是要知道,與其他編程語言不同,Python 沒有隱藏字段,因此您可以通過點表示法直接訪問類中的變量。
我們可以使用普通函數(shù)、property() 函數(shù)和 @property 裝飾器來實現(xiàn) getter 和 setter。
在 Python 中使用函數(shù)創(chuàng)建 Getter 和 Setter
稱為方法的典型類函數(shù)對于創(chuàng)建 getter 和 setter 非常有用,我們可以使用 self 概念輕松地設置它們。
該方法為 getter 返回屬性,對于 setter,該方法將參數(shù)綁定到屬性。 為了進行演示,我們將使用一個擁有位置屬性的 Employee、名為 getPosition 的 getter 方法和名為 setPosition 的 setter 方法。
class Employee: def __init__(self) -> None: self.position = None def getPosition(self): return self.position def setPosition(self, position): self.position = position Jacob = Employee() Jinku = Employee() Jacob.setPosition("Engineer II") Jinku.setPosition("Senior Engineer") print(Jacob.position) print(Jinku.getPosition())
輸出:
Engineer II
Senior Engineer
但是,這種設置或方法沒有太多特殊行為。
在Python中使用property()函數(shù)創(chuàng)建Getter和Setter
為了獲得一些特殊的行為,我們可以使用 property() 函數(shù)來創(chuàng)建并返回一個屬性對象,該對象包含三個方法:getter() 、setter() 和 delete()。
它有助于提供實例屬性的接口。 此功能使我們能夠輕松創(chuàng)建所有 getter 和 setter 功能。
要使用 property() 函數(shù),我們需要設置四個參數(shù)值,它們是使 property() 成為高階函數(shù)的函數(shù)。
getter、setter 和 delete 方法是它的參數(shù)(都是可選的),并且它返回屬性對象。
property(fget, fset, fdel, doc)
讓我們在 OOP 代碼中使用 property() 函數(shù)。
class Employee: def __init__(self): self.position = None def getPosition(self): return self.position def setPosition(self, position): self.position = position pos = property(getPosition, setPosition) Jacob = Employee() Jinku = Employee() Jacob.position = "Engineer II" Jinku.position = "Senior Engineer" print(Jacob.position) print(Jinku.position)
輸出:
Engineer II
Senior Engineer
隨著 property() 函數(shù)的引入,我們有了 pos 綁定,它保存屬性對象,有助于保持對私有屬性的安全訪問。
使用@property裝飾器在Python中創(chuàng)建Getter和Setter
我們可以使用 @property 裝飾器來實現(xiàn) property() 函數(shù),這樣就不需要在我們的方法中使用 get 和 set 名稱了。
使用 @property 裝飾器,我們可以重用定義 getter 和 setter 函數(shù)的位置名稱。
使用 @property,我們創(chuàng)建 getter,使用 @position.setter,我們創(chuàng)建 setter,這通過添加到代碼中并在輸出中可見的 print 語句顯而易見。
class Employee: def __init__(self): self.position = None @property def position(self): print("Get Employee Position: ") return self._position @position.setter def position(self, value): print("Set Position") self._position = value Jacob = Employee() Jinku = Employee() Jacob.position = "Engineer II" Jinku.position = "Senior Engineer" print(Jacob.position) print(Jinku.position)
輸出:
Set Position
Set Position
Set Position
Set Position
Get Employee Position:
Engineer II
Get Employee Position:
Senior Engineer
Set Position 有四種,因為 __init__ 方法在調用類實例時設置了初始位置屬性,從而導致了前兩種。 當我們將值設置為接下來兩個的相應值時,它會再次打印。
對于getter,它在獲取屬性值時打印語句Get Employee Position,并且getter只被調用兩次。 于是就有了這兩種說法。
當我們使用 setter 方法時,我們可以向 OOP 代碼添加驗證。
class Employee: def __init__(self): self.position = None @property def position(self): print("Get Employee Position: ") return self._position @position.setter def position(self, value): print("Set Position") if (value != None and len(value) <= 2): raise ValueError("Position name is less than two and is deemed invalid") self._position = value Jacob = Employee() Jinku = Employee() Jacob.position = "OS" Jinku.position = "Senior Engineer" print(Jacob.position) print(Jinku.position)
輸出:
Set Position
Set Position
Set Position
Traceback (most recent call last):
File "c:\Users\akinl\Documents\Python\getterSetter.py", line 20, in <module>
Jacob.position = "OS"
File "c:\Users\akinl\Documents\Python\getterSetter.py", line 14, in position
raise ValueError("Position name is less than two and is deemed invalid")
ValueError: Position name is less than two and is deemed invalid
到此這篇關于Python創(chuàng)建Getter和Setter的方法詳解的文章就介紹到這了,更多相關python創(chuàng)建Getter和Setter內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
使用Python實現(xiàn)XLS和XLSX之間的相互轉換
在日常工作中,我們經常需要處理和轉換不同格式的Excel文件,以適應不同的需求和軟件兼容性,Excel文件的兩種常見格式是XLS(Excel 97-2003)和XLSX(Excel 2007及以上版本),本文將詳細介紹如何使用Python在XLS和XLSX格式之間進行轉換,需要的朋友可以參考下2024-09-09使用Protocol Buffers的C語言拓展提速Python程序的示例
這篇文章主要介紹了使用Protocol Buffers的C語言拓展提速Python程序的示例,使用C拓展Python是Python編程進階中的重要技巧,需要的朋友可以參考下2015-04-04python腳本實現(xiàn)音頻m4a格式轉成MP3格式的實例代碼
這篇文章主要介紹了python腳本實現(xiàn)音頻m4a格式轉成MP3格式的實例代碼,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2019-10-10