您好,登錄后才能下訂單哦!
本文主要講述的是對Python中property屬性(特性)的理解,具體如下。
在property類中,有三個成員方法和三個裝飾器函數(shù)。
三個成員方法分別是:fget、fset、fdel,它們分別用來管理屬性訪問;
三個裝飾器函數(shù)分別是:getter、setter、deleter,它們分別用來把三個同名的類方法裝飾成property。
fget方法用來管理類實(shí)例屬性的獲取,fset方法用來管理類實(shí)例屬性的賦值,fdel方法用來管理類實(shí)例屬性的刪除;
getter裝飾器把一個自定義類方法裝飾成fget操作,setter裝飾器把一個自定義類方法裝飾成fset操作,deleter裝飾器把一個自定義類方法裝飾成fdel操作。
只要在獲取自定義類實(shí)例的屬性時就會自動調(diào)用fget成員方法,給自定義類實(shí)例的屬性賦值時就會自動調(diào)用fset成員方法,在刪除自定義類實(shí)例的屬性時就會自動調(diào)用fdel成員方法。
# 定義一個錢的類 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
# 定義一個錢的類 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是一個property對象, 是用來為這個私有變量__money提供接口的。 #如果二者的名字相同,那么就會出現(xiàn)遞歸調(diào)用,最終報錯。
@property成為屬性函數(shù),可以對屬性賦值時做必要的檢查,并保證代碼的清晰短小
# 定義一個錢的類 class Money(object): def __init__(self): self._money = 0 @property # 注意使用@property裝飾器對money函數(shù)進(jìn)行裝飾,就會自動生成一個money屬性, 當(dāng)調(diào)用獲取money的值時,就調(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
以上就是本文關(guān)于Python中property屬性實(shí)例解析的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。