Python創(chuàng)建Getter和Setter的方法詳解
面向?qū)ο缶幊蹋∣OP)是一種編程范式,它使很多事情變得容易,從可組合性到繼承,并允許我們更快地構(gòu)建功能和程序部件。 這個(gè)范式有不同的特點(diǎn); 兩個(gè)是 getter 和 setter。
類是 OOP 的基礎(chǔ),通常具有每個(gè)實(shí)例唯一的變量,并且這些變量(通常稱為屬性)通過(guò)方法設(shè)置或獲取。 這些方法稱為 getter 和 setter。
這些行為在支持 OOP 的編程語(yǔ)言中很流行,Python 也支持它。 本文將討論如何在 Python 中創(chuàng)建 getter 和 setter。
Python 中的 Getter 和 Setter
Getters 和 Setters 是幫助我們?cè)O(shè)置類變量或?qū)傩远鵁o(wú)需直接訪問(wèn)的方法,違背了抽象和封裝的目的。 因此,通過(guò) getter 和 setter,我們就能夠處理類屬性。
在我們創(chuàng)建 getter 和 setter 之前,重要的是要知道,與其他編程語(yǔ)言不同,Python 沒(méi)有隱藏字段,因此您可以通過(guò)點(diǎn)表示法直接訪問(wèn)類中的變量。
我們可以使用普通函數(shù)、property() 函數(shù)和 @property 裝飾器來(lái)實(shí)現(xiàn) getter 和 setter。
在 Python 中使用函數(shù)創(chuàng)建 Getter 和 Setter
稱為方法的典型類函數(shù)對(duì)于創(chuàng)建 getter 和 setter 非常有用,我們可以使用 self 概念輕松地設(shè)置它們。
該方法為 getter 返回屬性,對(duì)于 setter,該方法將參數(shù)綁定到屬性。 為了進(jìn)行演示,我們將使用一個(gè)擁有位置屬性的 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
但是,這種設(shè)置或方法沒(méi)有太多特殊行為。
在Python中使用property()函數(shù)創(chuàng)建Getter和Setter
為了獲得一些特殊的行為,我們可以使用 property() 函數(shù)來(lái)創(chuàng)建并返回一個(gè)屬性對(duì)象,該對(duì)象包含三個(gè)方法:getter() 、setter() 和 delete()。
它有助于提供實(shí)例屬性的接口。 此功能使我們能夠輕松創(chuàng)建所有 getter 和 setter 功能。
要使用 property() 函數(shù),我們需要設(shè)置四個(gè)參數(shù)值,它們是使 property() 成為高階函數(shù)的函數(shù)。
getter、setter 和 delete 方法是它的參數(shù)(都是可選的),并且它返回屬性對(duì)象。
property(fget, fset, fdel, doc)
讓我們?cè)?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 綁定,它保存屬性對(duì)象,有助于保持對(duì)私有屬性的安全訪問(wèn)。
使用@property裝飾器在Python中創(chuàng)建Getter和Setter
我們可以使用 @property 裝飾器來(lái)實(shí)現(xiàn) property() 函數(shù),這樣就不需要在我們的方法中使用 get 和 set 名稱了。
使用 @property 裝飾器,我們可以重用定義 getter 和 setter 函數(shù)的位置名稱。
使用 @property,我們創(chuàng)建 getter,使用 @position.setter,我們創(chuàng)建 setter,這通過(guò)添加到代碼中并在輸出中可見(jiàn)的 print 語(yǔ)句顯而易見(jiàn)。
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 有四種,因?yàn)?__init__ 方法在調(diào)用類實(shí)例時(shí)設(shè)置了初始位置屬性,從而導(dǎo)致了前兩種。 當(dāng)我們將值設(shè)置為接下來(lái)兩個(gè)的相應(yīng)值時(shí),它會(huì)再次打印。
對(duì)于getter,它在獲取屬性值時(shí)打印語(yǔ)句Get Employee Position,并且getter只被調(diào)用兩次。 于是就有了這兩種說(shuō)法。
當(dāng)我們使用 setter 方法時(shí),我們可以向 OOP 代碼添加驗(yàn)證。
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
到此這篇關(guān)于Python創(chuàng)建Getter和Setter的方法詳解的文章就介紹到這了,更多相關(guān)python創(chuàng)建Getter和Setter內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用Python實(shí)現(xiàn)XLS和XLSX之間的相互轉(zhuǎn)換
在日常工作中,我們經(jīng)常需要處理和轉(zhuǎn)換不同格式的Excel文件,以適應(yīng)不同的需求和軟件兼容性,Excel文件的兩種常見(jiàn)格式是XLS(Excel 97-2003)和XLSX(Excel 2007及以上版本),本文將詳細(xì)介紹如何使用Python在XLS和XLSX格式之間進(jìn)行轉(zhuǎn)換,需要的朋友可以參考下2024-09-09使用Protocol Buffers的C語(yǔ)言拓展提速Python程序的示例
這篇文章主要介紹了使用Protocol Buffers的C語(yǔ)言拓展提速Python程序的示例,使用C拓展Python是Python編程進(jìn)階中的重要技巧,需要的朋友可以參考下2015-04-04Python網(wǎng)絡(luò)爬蟲(chóng)與信息提取(實(shí)例講解)
下面小編就為大家?guī)?lái)一篇Python網(wǎng)絡(luò)爬蟲(chóng)與信息提取(實(shí)例講解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-08-08python腳本實(shí)現(xiàn)音頻m4a格式轉(zhuǎn)成MP3格式的實(shí)例代碼
這篇文章主要介紹了python腳本實(shí)現(xiàn)音頻m4a格式轉(zhuǎn)成MP3格式的實(shí)例代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-10-10