扣丁學(xué)堂Python培訓(xùn)分享Python中@property的使用
2019-04-26 14:08:44
2176瀏覽
今天有小伙伴遇到一個(gè)問題,那就是Python中@property的使用,今天扣丁學(xué)堂Python培訓(xùn)小編整理一下分享給大家,對(duì)Python中@property的使用感興趣或者不甚了解的小伙伴就隨小編來看一下吧,希望對(duì)小伙伴們有所幫助。
問題如下:
class TVshow:
a =['戰(zhàn)狼','紅樓夢(mèng)','西游記','亮劍']
def __init__(self,show):
self.show = show
@property
def show(self):
return self.show
@show.setter
def show(self,vloue):
if vloue in self.a:
self.show = '您選澤的:《'+vloue+'》,稍后將播放'
else:
self.show = '您點(diǎn)播的電影不存在'
tvshow=TVshow('戰(zhàn)狼')
print('正在播放:《',tvshow.show,'》')
print('您可以從',TVshow.a,'中選澤要點(diǎn)播的電影')
tvshow.show='紅樓夢(mèng)'
print(tvshow.show)
#運(yùn)行結(jié)果
Traceback (most recent call last):
......
[Previous line repeated 492 more times]
RecursionError: maximum recursion depth exceeded
#超過最大遞歸深度
Process finished with exit code 1
報(bào)錯(cuò)了,經(jīng)過改正后的代碼如下:
class TVshow:
a =['戰(zhàn)狼','紅樓夢(mèng)','西游記','亮劍']
def __init__(self,show):
self._show = show
@property
def show(self):
return self._show
@show.setter
def show(self,vloue):
if vloue in self.a:
self._show = '您選澤的:《'+vloue+'》,稍后將播放'
else:
self._show = '您點(diǎn)播的電影不存在'
tvshow=TVshow('戰(zhàn)狼')
print('正在播放:《',tvshow._show,'》')
print('您可以從',TVshow.a,'中選澤要點(diǎn)播的電影')
tvshow.show='紅樓夢(mèng)'
print(tvshow.show)
#運(yùn)行結(jié)果
正在播放:《 戰(zhàn)狼 》
您可以從 ['戰(zhàn)狼', '紅樓夢(mèng)', '西游記', '亮劍'] 中選澤要點(diǎn)播的電影
您選澤的:《紅樓夢(mèng)》,稍后將播放
Process finished with exit code 0
想不到吧,一個(gè)小小的下劃線竟然是罪魁禍?zhǔn)住2贿^還是不能理解,為什么報(bào)錯(cuò)會(huì)報(bào)循環(huán)超出最大深度的錯(cuò),又查找了一番資料,才發(fā)現(xiàn)我對(duì)@property 這個(gè)裝飾器一點(diǎn)也不理解。
@property的作用是把一個(gè)getter方法變成屬性,@xxxx.setter把setter方法變成屬性賦值,讓get和set方法更好用。
[當(dāng)方法名與屬性名一致時(shí),類屬性的下劃線不能少,否則,會(huì)報(bào)錯(cuò),原因在于:如果不加下劃線出現(xiàn)self.show時(shí)就會(huì)繼續(xù)調(diào)用此類的getter方法出現(xiàn)死循環(huán)。這個(gè)是我們需要注意的]
#必須保證兩個(gè)xxxx方法名與@xxxx.setter一致,但是不能與將要輸出的屬性名相同
class TVshow:
a =['戰(zhàn)狼','紅樓夢(mèng)','西游記','亮劍']
def __init__(self,show):
self.show = show
@property
def sxshow(self):
return self.show
@sxshow.setter
def sxshow(self,vloue):
if vloue in self.a:
self.show = '您選澤的:《'+vloue+'》,稍后將播放'
else:
self.show = '您點(diǎn)播的電影不存在'
tvshow=TVshow('戰(zhàn)狼')
print('正在播放:《',tvshow.show,'》')
print('您可以從',TVshow.a,'中選澤要點(diǎn)播的電影')
tvshow.show='紅樓夢(mèng)'
print(tvshow.show)
#運(yùn)行結(jié)果
正在播放:《 戰(zhàn)狼 》
您可以從 ['戰(zhàn)狼', '紅樓夢(mèng)', '西游記', '亮劍'] 中選澤要點(diǎn)播的電影
紅樓夢(mèng)
Process finished with exit code 0
以上就是扣丁學(xué)堂Python在線學(xué)習(xí)小編給大家分享的Python中@property的使用,希望對(duì)小伙伴們有所幫助,想要了解更多內(nèi)容的小伙伴可以登錄扣丁學(xué)堂官網(wǎng)咨詢。
想要學(xué)好Python開發(fā)小編給大家推薦口碑良好的扣丁學(xué)堂,扣丁學(xué)堂有專業(yè)老師制定的Python學(xué)習(xí)路線圖輔助學(xué)員學(xué)習(xí),此外還有與時(shí)俱進(jìn)的Python課程體系和Python視頻教程供大家學(xué)習(xí),想要學(xué)好Python開發(fā)技術(shù)的小伙伴快快行動(dòng)吧。扣丁學(xué)堂Python技術(shù)交流群:279521237。
【關(guān)注微信公眾號(hào)獲取更多學(xué)習(xí)資料】 【掃碼進(jìn)入Python全棧開發(fā)免費(fèi)公開課】
查看更多關(guān)于"Python開發(fā)資訊"的相關(guān)文章>
標(biāo)簽:
Python培訓(xùn)
Python視頻教程
Python在線視頻
Python學(xué)習(xí)視頻
Python培訓(xùn)班