Python中property屬性實(shí)例解析
本文主要講述的是對(duì)Python中property屬性(特性)的理解,具體如下。
定義及作用:
在property類中,有三個(gè)成員方法和三個(gè)裝飾器函數(shù)。
三個(gè)成員方法分別是:fget、fset、fdel,它們分別用來管理屬性訪問;
三個(gè)裝飾器函數(shù)分別是:getter、setter、deleter,它們分別用來把三個(gè)同名的類方法裝飾成property。
fget方法用來管理類實(shí)例屬性的獲取,fset方法用來管理類實(shí)例屬性的賦值,fdel方法用來管理類實(shí)例屬性的刪除;
getter裝飾器把一個(gè)自定義類方法裝飾成fget操作,setter裝飾器把一個(gè)自定義類方法裝飾成fset操作,deleter裝飾器把一個(gè)自定義類方法裝飾成fdel操作。
只要在獲取自定義類實(shí)例的屬性時(shí)就會(huì)自動(dòng)調(diào)用fget成員方法,給自定義類實(shí)例的屬性賦值時(shí)就會(huì)自動(dòng)調(diào)用fset成員方法,在刪除自定義類實(shí)例的屬性時(shí)就會(huì)自動(dòng)調(diào)用fdel成員方法。
下面從三個(gè)方面加以說明
Num01–>原始的getter和setter方法,獲取私有屬性值
# 定義一個(gè)錢的類 class Money(object): def __init__(self): self._money = 0 def getmoney(self): return self._money def setmoney(self, value): if isinstance(value, int): self._money = value else: print("error:不是整型數(shù)字") money = Money() print(money.getmoney()) # 結(jié)果是:0 print("====修改錢的大小值====") money.setmoney(100) print(money.getmoney()) # 結(jié)果是:100
Num02–>使用property升級(jí)getter和setter方法
# 定義一個(gè)錢的類 class Money(object): def __init__(self): self._money = 0 def getmoney(self): return self._money def setmoney(self, value): if isinstance(value, int): self._money = value else: print("error:不是整型數(shù)字") money = property(getmoney, setmoney) money = Money() print(money.getmoney()) # 結(jié)果是:0 print("====修改錢的大小值====") money.setmoney(100) print(money.getmoney()) # 結(jié)果是:100 #最后特別需要注意一點(diǎn):實(shí)際錢的值是存在私有便令__money中。而屬性money是一個(gè)property對(duì)象, 是用來為這個(gè)私有變量__money提供接口的。 #如果二者的名字相同,那么就會(huì)出現(xiàn)遞歸調(diào)用,最終報(bào)錯(cuò)。
Num03–>使用property取代getter和setter
@property成為屬性函數(shù),可以對(duì)屬性賦值時(shí)做必要的檢查,并保證代碼的清晰短小
# 定義一個(gè)錢的類 class Money(object): def __init__(self): self._money = 0 @property # 注意使用@property裝飾器對(duì)money函數(shù)進(jìn)行裝飾,就會(huì)自動(dòng)生成一個(gè)money屬性, 當(dāng)調(diào)用獲取money的值時(shí),就調(diào)用該函數(shù) def money(self): return self._money @money.setter # 使用生成的money屬性,調(diào)用@money.setter裝飾器,設(shè)置money的值 def money(self, value): if isinstance(value, int): self._money = value else: print("error:不是整型數(shù)字") aa = Money() print(aa.money) # 結(jié)果是:0 print("====修改錢的大小值====") aa.money = 100 print(aa.money) # 結(jié)果是:100
總結(jié)
以上就是本文關(guān)于Python中property屬性實(shí)例解析的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!
相關(guān)文章
Python基于plotly模塊實(shí)現(xiàn)的畫圖操作示例
這篇文章主要介紹了Python基于plotly模塊實(shí)現(xiàn)的畫圖操作,涉及Python基于plotly模塊的數(shù)值運(yùn)算與圖形操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-01-01Anaconda修改默認(rèn)虛擬環(huán)境安裝位置的方案分享
新安裝Anaconda后,在創(chuàng)建環(huán)境時(shí)環(huán)境自動(dòng)安裝在C盤,但是C盤空間有限,下面這篇文章主要給大家介紹了關(guān)于Anaconda修改默認(rèn)虛擬環(huán)境安裝位置的相關(guān)資料,需要的朋友可以參考下2023-01-01Python實(shí)現(xiàn)輕松找出兩個(gè)列表不同之處
在日常編程中,需要比較兩個(gè)列表并找出它們之間差異是一種常見需求,在本文中,我們將深入探討Python中查找兩個(gè)列表差異值的方法,需要的小伙伴可以參考下2023-12-12用Python爬取某乎手機(jī)APP數(shù)據(jù)
最近爬取的數(shù)據(jù)都是網(wǎng)頁(yè)端,今天來教大家如何爬取手機(jī)端app數(shù)據(jù)(本文以ios蘋果手機(jī)為例,其實(shí)安卓跟ios差不多)! 本文將以『某乎』為實(shí)戰(zhàn)案例,手把手教你從配置到代碼一步一步的爬取App數(shù)據(jù),需要的朋友可以參考下2021-06-06用60行代碼實(shí)現(xiàn)Python自動(dòng)搶微信紅包
這篇文章主要介紹了用60行代碼實(shí)現(xiàn)Python自動(dòng)搶微信紅包,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02Python Docx庫(kù)完美操作word文檔實(shí)例探究
這篇文章主要為大家介紹了Python Docx庫(kù)完美操作word文檔,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01