今天有小夥伴遇到一個問題,那就是Python中@property的使用,今天扣丁學堂Python培訓小編整理一下分享給大家,對Python中@property的使用感興趣或者不甚瞭解的小夥伴就隨小編來看一下吧,希望對小夥伴們有所幫助。
問題如下:
class TVshow:
a =['戰狼','紅樓夢','西遊記','亮劍']
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 = '您點播的電影不存在'
tvshow=TVshow('戰狼')
print('正在播放:《',tvshow.show,'》')
print('您可以從',TVshow.a,'中選澤要點播的電影')
tvshow.show='紅樓夢'
print(tvshow.show)
#運行結果
Traceback (most recent call last):
......
[Previous line repeated 492 more times]
RecursionError: maximum recursion depth exceeded
#超過最大遞歸深度
Process finished with exit code 1
報錯了,經過改正後的代碼如下:
class TVshow:
a =['戰狼','紅樓夢','西遊記','亮劍']
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 = '您點播的電影不存在'
tvshow=TVshow('戰狼')
print('正在播放:《',tvshow._show,'》')
print('您可以從',TVshow.a,'中選澤要點播的電影')
tvshow.show='紅樓夢'
print(tvshow.show)
#運行結果
正在播放:《 戰狼 》
您可以從 ['戰狼', '紅樓夢', '西遊記', '亮劍'] 中選澤要點播的電影
您選澤的:《紅樓夢》,稍後將播放
Process finished with exit code 0
想不到吧,一個小小的下劃線竟然是罪魁禍首。不過還是不能理解,爲什麼報錯會報循環超出最大深度的錯,又查找了一番資料,才發現我對@property 這個裝飾器一點也不理解。
@property的作用是把一個getter方法變成屬性,@xxxx.setter把setter方法變成屬性賦值,讓get和set方法更好用。
[當方法名與屬性名一致時,類屬性的下劃線不能少,否則,會報錯,原因在於:如果不加下劃線出現self.show時就會繼續調用此類的getter方法出現死循環。這個是我們需要注意的]
#必須保證兩個xxxx方法名與@xxxx.setter一致,但是不能與將要輸出的屬性名相同
class TVshow:
a =['戰狼','紅樓夢','西遊記','亮劍']
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 = '您點播的電影不存在'
tvshow=TVshow('戰狼')
print('正在播放:《',tvshow.show,'》')
print('您可以從',TVshow.a,'中選澤要點播的電影')
tvshow.show='紅樓夢'
print(tvshow.show)
#運行結果
正在播放:《 戰狼 》
您可以從 ['戰狼', '紅樓夢', '西遊記', '亮劍'] 中選澤要點播的電影
紅樓夢
Process finished with exit code 0
以上就是扣丁學堂Python在線學習小編給大家分享的Python中@property的使用,希望對小夥伴們有所幫助,想要了解更多內容的小夥伴可以登錄扣丁學堂官網諮詢。
想要學好Python開發小編給大家推薦口碑良好的扣丁學堂,扣丁學堂有專業老師制定的Python學習路線圖輔助學員學習,此外還有與時俱進的Python課程體系和Python視頻教程供大家學習,想要學好Python開發技術的小夥伴快快行動吧。